From 0f9acb80be5d72fe995cf6f22d23ab1c3387f806 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Katharina=20Kr=C3=A4mer?= <kkraemer4@uni-koblenz.de> Date: Tue, 7 Sep 2021 15:17:07 +0200 Subject: [PATCH] [#94] worked on raycast computation in comp shader status: only backgound colour --- projects/saf_r/shaders/raytracing.comp | 22 +++++++++++++--------- projects/saf_r/src/main.cpp | 23 +++++++++++++---------- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/projects/saf_r/shaders/raytracing.comp b/projects/saf_r/shaders/raytracing.comp index cb3a8119..6bc4e6b9 100644 --- a/projects/saf_r/shaders/raytracing.comp +++ b/projects/saf_r/shaders/raytracing.comp @@ -1,6 +1,8 @@ #version 450 core #extension GL_ARB_separate_shader_objects : enable +#define M_PI 3.1415926535897932384626433832795 + layout(local_size_x = 16, local_size_y = 16, local_size_z = 1) in; struct Material { @@ -135,19 +137,21 @@ vec3 castRay(const vec3 orig, const vec3 dir, int max_depth) { vec3 computeDirection(ivec2 coord){ + ivec2 outImageRes = imageSize(outImage); + float fov = M_PI / 2.f; //float x = (2 * (i + 0.5f) / (float)width - 1) * tan(fov / 2.f) * width / (float)height; + float x = (2 * (float(coord.x) + 0.5f) / float(outImageRes.x) - 1) * tan(fov / 2.f) * outImageRes.x / float(outImageRes.y); //float y = -(2 * (j + 0.5f) / (float)height - 1) * tan(fov / 2.f); - //glm::vec3 dir = glm::normalize(glm::vec3(x, y, -1)); - - return vec3(1,1,1); + float y = -(2 * (float(coord.y) + 0.5f) / float(outImageRes.y) - 1) * tan(fov / 2.f); + vec3 dir = normalize(vec3(x, y, -1)); + return dir; } void main(){ - //ivec2 coord = ivec2(gl_GlobalInvocationID.xy); - // int max_depth = 4; - //vec3 direction = computeDirection(coord); - //vec3 color = castRay(vec3(0,0,0), direction, max_depth); - // vec3 color = vec3(1,0,0); - //imageStore(outImage, coord, vec4(color, 0)); + ivec2 coord = ivec2(gl_GlobalInvocationID.xy); + int max_depth = 4; + vec3 direction = computeDirection(coord); + vec3 color = castRay(vec3(0,0,0), direction, max_depth); + imageStore(outImage, coord, vec4(color, 0.f)); } \ No newline at end of file diff --git a/projects/saf_r/src/main.cpp b/projects/saf_r/src/main.cpp index 7808e425..bb0bc4fd 100644 --- a/projects/saf_r/src/main.cpp +++ b/projects/saf_r/src/main.cpp @@ -144,13 +144,9 @@ int main(int argc, const char** argv) { core.writeDescriptorSet(descriptorSet, setWrites); vkcv::DescriptorWrites computeWrites; - computeWrites.storageBufferWrites = { vkcv::BufferDescriptorWrite(0,lightsBuffer.getHandle()) }; - core.writeDescriptorSet(computeDescriptorSet, computeWrites); - computeWrites.storageBufferWrites = { vkcv::BufferDescriptorWrite(1,materialBuffer.getHandle()) }; - core.writeDescriptorSet(computeDescriptorSet, computeWrites); - computeWrites.storageBufferWrites = { vkcv::BufferDescriptorWrite(2,sphereBuffer.getHandle()) }; - core.writeDescriptorSet(computeDescriptorSet, computeWrites); - computeWrites.storageImageWrites = { vkcv::StorageImageDescriptorWrite(3, swapchainInput)}; + computeWrites.storageBufferWrites = { vkcv::BufferDescriptorWrite(0,lightsBuffer.getHandle()), + vkcv::BufferDescriptorWrite(1,materialBuffer.getHandle()), + vkcv::BufferDescriptorWrite(2,sphereBuffer.getHandle())}; core.writeDescriptorSet(computeDescriptorSet, computeWrites); const auto& context = core.getContext(); @@ -238,7 +234,14 @@ int main(int argc, const char** argv) { vkcv::PushConstants pushConstantsCompute(0); //pushConstantsCompute.appendDrawcall(pushData); - uint32_t computeDispatchCount[3] = {static_cast<uint32_t> (std::ceil( windowWidth/16.f)), static_cast<uint32_t> (std::ceil(windowHeight/16.f)), 1 }; // Anzahl workgroups + computeWrites.storageImageWrites = { vkcv::StorageImageDescriptorWrite(3, swapchainInput)}; + core.writeDescriptorSet(computeDescriptorSet, computeWrites); + + core.prepareImageForStorage (cmdStream, swapchainInput); + + uint32_t computeDispatchCount[3] = {static_cast<uint32_t> (std::ceil( windowWidth/16.f)), + static_cast<uint32_t> (std::ceil(windowHeight/16.f)), + 1 }; // Anzahl workgroups core.recordComputeDispatchToCmdStream(cmdStream, computePipeline, computeDispatchCount, @@ -247,13 +250,13 @@ int main(int argc, const char** argv) { core.recordBufferMemoryBarrier(cmdStream, lightsBuffer.getHandle()); - core.recordDrawcallsToCmdStream( + /*core.recordDrawcallsToCmdStream( cmdStream, safrPass, safrPipeline, pushConstants, { drawcall }, - { swapchainInput }); + { swapchainInput });*/ core.prepareSwapchainImageForPresent(cmdStream); core.submitCommandStream(cmdStream); -- GitLab