ソースを参照

Change Build()-> operations in RayTracingAccelerationStructure to declarative interface

Signed-off-by: Markus Prettner <[email protected]>
Markus Prettner 2 ヶ月 前
コミット
b3cbe62a35
1 ファイル変更38 行追加34 行削除
  1. 38 34
      Gem/Code/Source/RHI/RayTracingExampleComponent.cpp

+ 38 - 34
Gem/Code/Source/RHI/RayTracingExampleComponent.cpp

@@ -342,12 +342,11 @@ namespace AtomSampleViewer
                 };
 
                 RHI::RayTracingBlasDescriptor triangleBlasDescriptor;
-                triangleBlasDescriptor.Build()
-                    ->Geometry()
-                        ->VertexFormat(RHI::Format::R32G32B32_FLOAT)
-                        ->VertexBuffer(triangleVertexBufferView)
-                        ->IndexBuffer(triangleIndexBufferView)
-                ;
+
+                RHI::RayTracingGeometry& triangleBlasGeometry = triangleBlasDescriptor.m_geometries.emplace_back();
+                triangleBlasGeometry.m_vertexFormat = RHI::Format::R32G32B32_FLOAT;
+                triangleBlasGeometry.m_vertexBuffer = triangleVertexBufferView;
+                triangleBlasGeometry.m_indexBuffer = triangleIndexBufferView;
 
                 m_triangleRayTracingBlas->CreateBuffers(RHI::MultiDevice::AllDevices, &triangleBlasDescriptor, *m_rayTracingBufferPools);
             }
@@ -372,12 +371,11 @@ namespace AtomSampleViewer
                 };
 
                 RHI::RayTracingBlasDescriptor rectangleBlasDescriptor;
-                rectangleBlasDescriptor.Build()
-                    ->Geometry()
-                        ->VertexFormat(RHI::Format::R32G32B32_FLOAT)
-                        ->VertexBuffer(rectangleVertexBufferView)
-                        ->IndexBuffer(rectangleIndexBufferView)
-                ;
+
+                RHI::RayTracingGeometry& rectangleBlasGeometry = rectangleBlasDescriptor.m_geometries.emplace_back();
+                rectangleBlasGeometry.m_vertexFormat = RHI::Format::R32G32B32_FLOAT;
+                rectangleBlasGeometry.m_vertexBuffer = rectangleVertexBufferView;
+                rectangleBlasGeometry.m_indexBuffer = rectangleIndexBufferView;
 
                 m_rectangleRayTracingBlas->CreateBuffers(RHI::MultiDevice::AllDevices, &rectangleBlasDescriptor, *m_rayTracingBufferPools);
             }
@@ -403,28 +401,34 @@ namespace AtomSampleViewer
 
             // create the TLAS
             RHI::RayTracingTlasDescriptor tlasDescriptor;
-            tlasDescriptor.Build()
-                ->Instance()
-                    ->InstanceID(0)
-                    ->HitGroupIndex(0)
-                    ->Blas(m_triangleRayTracingBlas)
-                    ->Transform(triangleTransform1)
-                ->Instance()
-                    ->InstanceID(1)
-                    ->HitGroupIndex(1)
-                    ->Blas(m_triangleRayTracingBlas)
-                    ->Transform(triangleTransform2)
-                ->Instance()
-                    ->InstanceID(2)
-                    ->HitGroupIndex(2)
-                    ->Blas(m_triangleRayTracingBlas)
-                    ->Transform(triangleTransform3)
-                ->Instance()
-                    ->InstanceID(3)
-                    ->HitGroupIndex(3)
-                    ->Blas(m_rectangleRayTracingBlas)
-                    ->Transform(rectangleTransform)
-                ;
+            {
+                RHI::RayTracingTlasInstance& tlasInstance = tlasDescriptor.m_instances.emplace_back();
+                tlasInstance.m_instanceID = 0;
+                tlasInstance.m_hitGroupIndex = 0;
+                tlasInstance.m_blas = m_triangleRayTracingBlas;
+                tlasInstance.m_transform = triangleTransform1;
+            }
+            {
+                RHI::RayTracingTlasInstance& tlasInstance = tlasDescriptor.m_instances.emplace_back();
+                tlasInstance.m_instanceID = 1;
+                tlasInstance.m_hitGroupIndex = 1;
+                tlasInstance.m_blas = m_triangleRayTracingBlas;
+                tlasInstance.m_transform = triangleTransform2;
+            }
+            {
+                RHI::RayTracingTlasInstance& tlasInstance = tlasDescriptor.m_instances.emplace_back();
+                tlasInstance.m_instanceID = 2;
+                tlasInstance.m_hitGroupIndex = 2;
+                tlasInstance.m_blas = m_triangleRayTracingBlas;
+                tlasInstance.m_transform = triangleTransform3;
+            }
+            {
+                RHI::RayTracingTlasInstance& tlasInstance = tlasDescriptor.m_instances.emplace_back();
+                tlasInstance.m_instanceID = 3;
+                tlasInstance.m_hitGroupIndex = 3;
+                tlasInstance.m_blas = m_rectangleRayTracingBlas;
+                tlasInstance.m_transform = rectangleTransform;
+            }
 
             m_rayTracingTlas->CreateBuffers(RHI::MultiDevice::AllDevices, &tlasDescriptor, *m_rayTracingBufferPools);