From 0cc557009845719a0fd5c3c5b6bb96e7ac4d3888 Mon Sep 17 00:00:00 2001 From: Ben Kyd Date: Sun, 28 Jan 2024 23:20:39 +0000 Subject: [PATCH] tracing --- src/graphics/rendertarget.cpp | 8 ++--- src/inferno.cpp | 18 +++++----- src/raytracing/renderer.cpp | 62 +++++++++++++++++------------------ 3 files changed, 42 insertions(+), 46 deletions(-) diff --git a/src/graphics/rendertarget.cpp b/src/graphics/rendertarget.cpp index ac91242..1804429 100644 --- a/src/graphics/rendertarget.cpp +++ b/src/graphics/rendertarget.cpp @@ -172,15 +172,11 @@ DynamicCPUTarget* dynamic_rendertarget_create( samplerInfo.addressModeV = VK_SAMPLER_ADDRESS_MODE_REPEAT; samplerInfo.addressModeW = VK_SAMPLER_ADDRESS_MODE_REPEAT; samplerInfo.anisotropyEnable = VK_FALSE; - samplerInfo.maxAnisotropy = 1.0f; + samplerInfo.maxAnisotropy = 0.0f; samplerInfo.borderColor = VK_BORDER_COLOR_INT_OPAQUE_BLACK; samplerInfo.unnormalizedCoordinates = VK_FALSE; samplerInfo.compareEnable = VK_FALSE; samplerInfo.compareOp = VK_COMPARE_OP_ALWAYS; - samplerInfo.mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR; - samplerInfo.mipLodBias = 0.0f; - samplerInfo.minLod = 0.0f; - samplerInfo.maxLod = 0.0f; if (vkCreateSampler(device->VulkanDevice, &samplerInfo, nullptr, &target->Sampler) != VK_SUCCESS) { @@ -188,7 +184,7 @@ DynamicCPUTarget* dynamic_rendertarget_create( } // Create VkImage with Undefined - create_image(device, extent.width, extent.height, format, VK_IMAGE_TILING_OPTIMAL, + create_image(device, extent.width, extent.height, format, VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, target->Image, target->Memory); diff --git a/src/inferno.cpp b/src/inferno.cpp index 852f9c2..ff0f67d 100644 --- a/src/inferno.cpp +++ b/src/inferno.cpp @@ -353,15 +353,15 @@ int inferno_run(InfernoApp* app) } if (ImGui::Begin("Render")) { - static ImVec2 lastViewport = { 0, 0 }; - ImVec2 currentViewport = ImGui::GetWindowSize(); - if (lastViewport.x != currentViewport.x - || lastViewport.y != currentViewport.y) { - graphics::camera_ray_set_viewport(scene::scene_get_camera(app->Scene), - { ImGui::GetWindowSize().x, ImGui::GetWindowSize().y }); - graphics::rayr_set_viewport(app->RayRenderer, app->Scene->Camera); - } - lastViewport = currentViewport; + // static ImVec2 lastViewport = { 0, 0 }; + // ImVec2 currentViewport = ImGui::GetWindowSize(); + // if (lastViewport.x != currentViewport.x + // || lastViewport.y != currentViewport.y) { + // graphics::camera_ray_set_viewport(scene::scene_get_camera(app->Scene), + // { ImGui::GetWindowSize().x, ImGui::GetWindowSize().y }); + // graphics::rayr_set_viewport(app->RayRenderer, app->Scene->Camera); + // } + // lastViewport = currentViewport; graphics::rayr_draw(app->RayRenderer); diff --git a/src/raytracing/renderer.cpp b/src/raytracing/renderer.cpp index 485932a..d48ab80 100644 --- a/src/raytracing/renderer.cpp +++ b/src/raytracing/renderer.cpp @@ -103,40 +103,40 @@ void rayr_draw(RayRenderer* renderer) scene::scene_frame_tick(renderer->Scene); // TODO: Rays should definately be bump allocated if possible, this is KBs of // ray data and nothing else being reallocated every frame for no reason - // rays::ReferencedRayField startRays - // = rays::generate_initial_rays(scene::scene_get_camera(renderer->Scene), true); + rays::ReferencedRayField startRays + = rays::generate_initial_rays(scene::scene_get_camera(renderer->Scene), true); +#pragma omp parallel for for (int x = 0; x < renderer->Viewport.extent.width; x++) { for (int y = 0; y < renderer->Viewport.extent.height; y++) { - // rays::Ray* ray = startRays.Field[x * renderer->Viewport.extent.height + y]; - renderer->RenderData[y * renderer->Viewport.extent.width + x] - // = { ray->Direction.x, ray->Direction.y, ray->Direction.z, 1.0 }; - = { 1.0, 1.0, 1.0, 1.0 }; - // rays::HitInfo* closest_hit = nullptr; - // - // for (auto& obj : scene::scene_get_renderables(renderer->Scene)) { - // rays::HitInfo* hit = rays::object_ray_collide(obj, ray); - // if (hit->Did) { - // if (closest_hit == nullptr) { - // closest_hit = hit; - // } else { - // bool is_closer = hit->Distance < closest_hit->Distance; - // if (is_closer) { - // delete closest_hit; - // closest_hit = hit; - // } else { - // delete hit; - // } - // } - // } - // if (hit->Did) { - // glm::vec3 hit_distance = glm::vec3 { hit->Distance }; - // hit_distance /= 10; - // renderer->RenderData[y * renderer->Viewport.extent.width + x] - // = { hit_distance, 1.0 }; - // } - // delete hit; - // } + // renderer->RenderData[y * renderer->Viewport.extent.width + x] + // = { 1.0, 1.0, 1.0, 1.0 }; + rays::Ray* ray = startRays.Field[x * renderer->Viewport.extent.height + y]; + rays::HitInfo* closest_hit = nullptr; + + for (auto& obj : scene::scene_get_renderables(renderer->Scene)) { + rays::HitInfo* hit = rays::object_ray_collide(obj, ray); + if (hit->Did) { + if (closest_hit == nullptr) { + closest_hit = hit; + } else { + bool is_closer = hit->Distance < closest_hit->Distance; + if (is_closer) { + delete closest_hit; + closest_hit = hit; + } else { + delete hit; + } + } + } + if (hit->Did) { + glm::vec3 hit_distance = glm::vec3 { hit->Distance }; + hit_distance /= 10; + renderer->RenderData[y * renderer->Viewport.extent.width + x] + = { hit_distance, 1.0 }; + } + delete hit; + } } }