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