diff --git a/projects/saf_r/shaders/raytracing.comp b/projects/saf_r/shaders/raytracing.comp index cb3a811964e22e474fc1a42cf6a5092b3979253f..6bc4e6b9cea8999bc48ddb5ce1fe94c8d12e21de 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 7808e42505b4bfd2d04212ad988d1b8137711ad2..bb0bc4fd0f7c32f94107088b0342e63ffe8e0982 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);