Nebula
Loading...
Searching...
No Matches
raytracingcontext.h
Go to the documentation of this file.
1#pragma once
2//------------------------------------------------------------------------------
9//------------------------------------------------------------------------------
12#include "coregraphics/buffer.h"
13#include "coregraphics/shader.h"
14#include "materials/gpulang/materialtemplatesgpulang.h"
16
17namespace Raytracing
18{
19
24
34
35static constexpr const char* HitShaderPaths[NumObjectTypes] =
36{
37 "shd:raytracing/shaders/brdfhit.gplb",
38 "shd:raytracing/shaders/bsdfhit.gplb",
39 "shd:raytracing/shaders/gltfhit.gplb",
40 "shd:raytracing/shaders/terrainhit.gplb",
41 "shd:raytracing/shaders/particlehit.gplb"
42};
43
49
51{
53public:
58
60 static void Create(const RaytracingSetupSettings& settings);
62 static void Discard();
64 static const CoreGraphics::ShaderProgramId* GetHitPrograms();
65
69 static void SetupMesh(
71 , const UpdateType objectType
73 , const CoreGraphics::IndexType::Code indexType
74 , const CoreGraphics::VertexAlloc& vertices
75 , const CoreGraphics::VertexAlloc& indices
76 , const CoreGraphics::PrimitiveGroup& patchPrimGroup
77 , const size_t vertexOffsetStride
78 , const size_t patchVertexStride
79 , const Util::Array<Math::mat4> transforms
80 , const uint materialTableOffset
81 , const MaterialTemplatesGPULang::MaterialProperties shader
82 , const CoreGraphics::VertexLayoutType vertexLayout
83 );
85 static void InvalidateBLAS(const Graphics::GraphicsEntityId id);
86
90 static void RenderUI(const Graphics::FrameContext& ctx);
92 static void UpdateTransforms(const Graphics::FrameContext& ctx);
94 static void WaitForJobs(const Graphics::FrameContext& ctx);
96 static void UpdateResources(const Graphics::FrameContext& ctx);
97
101 static CoreGraphics::TlasId GetTLAS(const IndexT bufferIndex);
106
107#ifndef PUBLIC_DEBUG
109 static void OnRenderDebug(uint32_t flags);
110#endif
111
112private:
113
117 static void Dealloc(Graphics::ContextEntityId id);
118
119
120
121 enum
122 {
127 };
128 typedef Ids::IdAllocator<
131 uint,
135};
136
137//------------------------------------------------------------------------------
145} // namespace Raytracing
Code
index types enum
Definition indextype.h:22
Defines a group of primitives as a subset of a vertex buffer and index buffer plus the primitive topo...
Definition primitivegroup.h:20
Format
component format
Definition vertexcomponent.h:25
Definition graphicscontext.h:175
An ID allocator associates an id with a slice in an N number of arrays.
Definition idallocator.h:39
static CoreGraphics::TlasId GetTLAS(const IndexT bufferIndex)
Get TLAS for a buffered frame.
Definition raytracingcontext.cc:950
static void InvalidateBLAS(const Graphics::GraphicsEntityId id)
Invalidate a BLAS (for example, when the mesh has morphed) associated with a graphics entity.
Definition raytracingcontext.cc:682
static void Dealloc(Graphics::ContextEntityId id)
deallocate a slice
Definition raytracingcontext.cc:988
static CoreGraphics::BufferId GetObjectBindingBuffer()
Get object binding buffer.
Definition raytracingcontext.cc:960
static void Discard()
Definition raytracingcontext.cc:419
static void SetupMesh(const Graphics::GraphicsEntityId id, const UpdateType objectType, const CoreGraphics::VertexComponent::Format format, const CoreGraphics::IndexType::Code indexType, const CoreGraphics::VertexAlloc &vertices, const CoreGraphics::VertexAlloc &indices, const CoreGraphics::PrimitiveGroup &patchPrimGroup, const size_t vertexOffsetStride, const size_t patchVertexStride, const Util::Array< Math::mat4 > transforms, const uint materialTableOffset, const MaterialTemplatesGPULang::MaterialProperties shader, const CoreGraphics::VertexLayoutType vertexLayout)
Setup a terrain system for ray tracing.
Definition raytracingcontext.cc:589
Ids::IdAllocator< Memory::RangeAllocation, Raytracing::UpdateType, uint, Util::FixedArray< CoreGraphics::BlasId > > RaytracingAllocator
Definition raytracingcontext.h:133
static void OnRenderDebug(uint32_t flags)
debug rendering
Definition raytracingcontext.cc:978
static RaytracingAllocator raytracingContextAllocator
Definition raytracingcontext.h:134
static CoreGraphics::ResourceTableId GetRaytracingTable(const IndexT bufferIndex)
Get raytracing table.
Definition raytracingcontext.cc:969
static void WaitForJobs(const Graphics::FrameContext &ctx)
Wait for jobs to finish.
Definition raytracingcontext.cc:903
@ Raytracing_Blases
Definition raytracingcontext.h:126
@ Raytracing_UpdateType
Definition raytracingcontext.h:124
@ Raytracing_Allocation
Definition raytracingcontext.h:123
@ Raytracing_NumStructures
Definition raytracingcontext.h:125
RaytracingContext()
constructor
Definition raytracingcontext.cc:87
static void UpdateResources(const Graphics::FrameContext &ctx)
Update view constants.
Definition raytracingcontext.cc:917
static void UpdateTransforms(const Graphics::FrameContext &ctx)
Update transforms.
Definition raytracingcontext.cc:809
static Graphics::ContextEntityId Alloc()
allocate a new slice for this context
Definition raytracingcontext.h:141
static void RenderUI(const Graphics::FrameContext &ctx)
Render IMGUI.
Definition raytracingcontext.cc:729
static void SetupModel(const Graphics::GraphicsEntityId id, CoreGraphics::BlasInstanceFlags flags, uchar mask)
Setup a model entity for ray tracing, assumes model context registration.
Definition raytracingcontext.cc:429
~RaytracingContext()
destructor
Definition raytracingcontext.cc:96
static void Create(const RaytracingSetupSettings &settings)
Setup ray tracing context.
Definition raytracingcontext.cc:105
static void ReconstructTopLevelAcceleration(const Graphics::FrameContext &ctx)
Build top level acceleration.
Definition raytracingcontext.cc:693
static CoreGraphics::ResourceTableId GetLightGridResourceTable(IndexT bufferIndex)
Get light grid resources.
Definition raytracingcontext.cc:941
static const CoreGraphics::ShaderProgramId * GetHitPrograms()
Hit programs in ObjectType order. Shared by raytracing and DDGI pipelines.
Definition raytracingcontext.cc:410
Nebula's dynamic array class.
Definition array.h:61
Implements a fixed size one-dimensional array.
Definition fixedarray.h:20
BlasInstanceFlags
Definition accelerationstructure.h:57
VertexLayoutType
Definition vertexlayout.h:49
Context dealing with scene management for ray tracing.
Definition modelcontext.h:40
static constexpr const char * HitShaderPaths[NumObjectTypes]
Definition raytracingcontext.h:35
UpdateType
Definition raytracingcontext.h:45
@ Static
Definition raytracingcontext.h:47
@ Dynamic
Definition raytracingcontext.h:46
ObjectType
Definition raytracingcontext.h:26
@ GLTFObject
Definition raytracingcontext.h:29
@ ParticleObject
Definition raytracingcontext.h:31
@ BRDFObject
Definition raytracingcontext.h:27
@ TerrainObject
Definition raytracingcontext.h:30
@ NumObjectTypes
Definition raytracingcontext.h:32
@ BSDFObject
Definition raytracingcontext.h:28
A shader represents an entire shader resource, containing several stages and programs.
Definition buffer.h:23
Definition resourcetable.h:95
Definition accelerationstructure.h:108
Definition mesh.h:21
Definition graphicscontext.h:143
Definition graphicsserver.h:63
The graphics entity is only an Id, to which we can attach GraphicsContexts.
Definition graphicsentity.h:16
Describes a range allocated by the Memory::RangeAllocator.
Definition rangeallocator.h:25
Definition raytracingcontext.h:21
SizeT maxNumAllowedInstances
Definition raytracingcontext.h:22
unsigned char uchar
Definition types.h:35
int SizeT
Definition types.h:42
unsigned int uint
Definition types.h:33
int IndexT
Definition types.h:41