Nebula
Loading...
Searching...
No Matches
visibilitycontext.h
Go to the documentation of this file.
1#pragma once
2//------------------------------------------------------------------------------
9//------------------------------------------------------------------------------
11#include "visibility.h"
12#include "jobs/jobs.h"
14#include "models/model.h"
16#include "materials/gpulang/materialtemplatesgpulang.h"
18#include "math/clipstatus.h"
19#include "coregraphics/mesh.h"
20
21namespace Models
22{
23 class ModelContext;
24}
25
26namespace Visibility
27{
28
29enum
30{
42};
43
44enum
45{
52};
53
54enum
55{
58};
59
61{
62 DependencyMode_Total, // if B depends on A, and A doesn't see B, B sees nothing either
63 DependencyMode_Masked // visibility of B is dependent on A for each result
64};
65
67{
69public:
70
72 static void Setup(const Graphics::GraphicsEntityId id, VisibilityEntityType entityType, bool isOrtho = false);
75
77 static void RunVisibilityTests(const Graphics::FrameContext& ctx);
79 static void GenerateDrawLists(const Graphics::FrameContext& ctx);
80
82 static void Create();
84 static void Discard();
85
96
98 static void WaitForVisibility(const Graphics::FrameContext& ctx);
99
100#ifndef PUBLIC_BUILD
102 static void OnRenderDebug(uint32_t flags);
103#endif
104
106
118
120 {
121 uint32_t offset;
122 uint32_t numInstances;
123 uint32_t baseInstance;
124 };
125
133
139
142
148
149private:
150
151 friend class ObservableContext;
154
155 typedef Ids::IdAllocator<
156 Math::mat4 // transform of observer camera
157 , bool // observer is an orthogonal camera
158 , Graphics::GraphicsEntityId // entity id
159 , VisibilityEntityType // type of object so we know how to get the transform
160 , VisibilityResultArray // visibility lookup table
161 , Graphics::GraphicsEntityId // dependency
162 , DependencyMode // dependency mode
163 , VisibilityDrawList // draw list
164 , Memory::ArenaAllocator<1024> // memory allocator for draw commands
165 , Util::FixedArray<uint64_t> // index buffer
169
173 static void Dealloc(Graphics::ContextEntityId id);
174
177};
178
180{
182public:
183
185 static void Setup(const Graphics::GraphicsEntityId id, VisibilityEntityType entityType);
186
188 static void Create();
189private:
190
191 friend class ObserverContext;
193
194 // observable corresponds to a single entity
195 typedef Ids::IdAllocator<
196 Graphics::GraphicsEntityId, // The entity id that this component is bound to
197 uint32_t // Node instance range
199
201
205 static void Dealloc(Graphics::ContextEntityId id);
206};
207
208} // namespace Visibility
Defines a group of primitives as a subset of a vertex buffer and index buffer plus the primitive topo...
Definition primitivegroup.h:20
Definition graphicscontext.h:165
An ID allocator associates an id with a slice in an N number of arrays.
Definition idallocator.h:39
Allocates memory in chunks.
Definition arenaallocator.h:36
Definition modelcontext.h:58
Nebula's dynamic array class.
Definition array.h:60
Implements a fixed size one-dimensional array.
Definition fixedarray.h:20
Organizes key/value pairs by a hash code.
Definition hashtable.h:42
Nebula's queue class (a FIFO container).
Definition queue.h:28
A StringAtom.
Definition stringatom.h:22
Definition visibilitycontext.h:180
Ids::IdAllocator< Graphics::GraphicsEntityId, uint32_t > ObservableAllocator
Definition visibilitycontext.h:198
static Graphics::ContextEntityId Alloc()
allocate a new slice for this context
Definition visibilitycontext.cc:681
static ObservableAllocator observableAllocator
Definition visibilitycontext.h:200
static void Setup(const Graphics::GraphicsEntityId id, VisibilityEntityType entityType)
setup entity
Definition visibilitycontext.cc:638
friend class ObserverContext
Definition visibilitycontext.h:191
static void Dealloc(Graphics::ContextEntityId id)
deallocate a slice
Definition visibilitycontext.cc:692
static void Create()
create context
Definition visibilitycontext.cc:671
Definition visibilitycontext.h:67
static Util::Queue< Jobs::JobId > runningJobs
Definition visibilitycontext.h:147
Util::Array< Math::ClipStatus::Type > VisibilityResultArray
Definition visibilitycontext.h:153
static Jobs::JobSyncId jobInternalSync3
Definition visibilitycontext.h:145
static VisibilitySystem * CreateBruteforceSystem(const BruteforceSystemLoadInfo &info)
create brute force system
Definition visibilitycontext.cc:481
static Jobs::JobSyncId jobHostSync
Definition visibilitycontext.h:146
Ids::Id32 ModelAllocId
Definition visibilitycontext.h:105
static void WaitForVisibility(const Graphics::FrameContext &ctx)
wait for all visibility jobs
Definition visibilitycontext.cc:493
static Util::Array< VisibilitySystem * > systems
keep as ordinary array of pointers, no need to have them cache aligned
Definition visibilitycontext.h:176
static Graphics::ContextEntityId Alloc()
allocate a new slice for this context
Definition visibilitycontext.cc:615
static VisibilitySystem * CreateBoxSystem(const BoxSystemLoadInfo &info)
create a box system
Definition visibilitycontext.cc:433
static const VisibilityDrawList * GetVisibilityDrawList(const Graphics::GraphicsEntityId id)
get visibility draw list
Definition visibilitycontext.cc:602
static Jobs::JobSyncId jobInternalSync2
Definition visibilitycontext.h:144
static void Discard()
discard context
Definition visibilitycontext.cc:418
static void GenerateDrawLists(const Graphics::FrameContext &ctx)
runs before frame is updated
Definition visibilitycontext.cc:394
Ids::IdAllocator< Math::mat4, bool, Graphics::GraphicsEntityId, VisibilityEntityType, VisibilityResultArray, Graphics::GraphicsEntityId, DependencyMode, VisibilityDrawList, Memory::ArenaAllocator< 1024 >, Util::FixedArray< uint64_t >, Util::FixedArray< Math::ClipStatus::Type > > ObserverAllocator
Definition visibilitycontext.h:167
static void Create()
create context
Definition visibilitycontext.cc:403
friend class ObservableContext
Definition visibilitycontext.h:151
friend struct ObservableGlobalState
Definition visibilitycontext.h:152
static VisibilitySystem * CreateQuadtreeSystem(const QuadtreeSystemLoadInfo &info)
create quadtree system
Definition visibilitycontext.cc:469
static VisibilitySystem * CreatePortalSystem(const PortalSystemLoadInfo &info)
create a portal system
Definition visibilitycontext.cc:445
static VisibilitySystem * CreateOctreeSystem(const OctreeSystemLoadInfo &info)
create octree system
Definition visibilitycontext.cc:457
static void Dealloc(Graphics::ContextEntityId id)
deallocate a slice
Definition visibilitycontext.cc:624
static Jobs::JobSyncId jobInternalSync
Definition visibilitycontext.h:143
static void OnRenderDebug(uint32_t flags)
render debug
Definition visibilitycontext.cc:508
static void Setup(const Graphics::GraphicsEntityId id, VisibilityEntityType entityType, bool isOrtho=false)
setup entity
Definition visibilitycontext.cc:54
static void MakeDependency(const Graphics::GraphicsEntityId a, const Graphics::GraphicsEntityId b, const DependencyMode mode)
setup a dependency between observers
Definition visibilitycontext.cc:67
static ObserverAllocator observerAllocator
Definition visibilitycontext.h:168
static void RunVisibilityTests(const Graphics::FrameContext &ctx)
run visibility testing
Definition visibilitycontext.cc:78
Definition visibilitysystem.h:84
uint32_t Id32
Definition id.h:138
A model resource consists of nodes, each of which inhibit some information read from an ....
Definition model.cc:10
Implements a resource loader for models.
Definition modelcontext.h:35
@ ObservableAtom_VisibilityEntityType
Definition visibilitycontext.h:50
@ ObservableAtom_NodeInstanceRange
Definition visibilitycontext.h:46
@ ObservableAtom_Instance
Definition visibilitycontext.h:49
@ ObservableAtom_GraphicsEntityId
Definition visibilitycontext.h:47
@ ObservableAtom_Active
Definition visibilitycontext.h:51
@ ObservableAtom_Transform
Definition visibilitycontext.h:48
DependencyMode
Definition visibilitycontext.h:61
@ DependencyMode_Masked
Definition visibilitycontext.h:63
@ DependencyMode_Total
Definition visibilitycontext.h:62
@ Observable_NumNodes
Definition visibilitycontext.h:57
@ Observable_EntityId
Definition visibilitycontext.h:56
@ Observer_DrawListAllocator
Definition visibilitycontext.h:39
@ Observer_IsOrtho
Definition visibilitycontext.h:32
@ Observer_DependencyMode
Definition visibilitycontext.h:37
@ Observer_DrawList
Definition visibilitycontext.h:38
@ Observer_EntityId
Definition visibilitycontext.h:33
@ Observer_ResultArray
Definition visibilitycontext.h:35
@ Observer_EntityType
Definition visibilitycontext.h:34
@ Observer_Dependency
Definition visibilitycontext.h:36
@ Observer_IndexedClipStatuses
Definition visibilitycontext.h:41
@ Observer_IndexBuffer
Definition visibilitycontext.h:40
@ Observer_Matrix
Definition visibilitycontext.h:31
VisibilityEntityType
Definition visibility.h:36
Definition mesh.h:29
Definition graphicscontext.h:133
Definition graphicsserver.h:31
The graphics entity is only an Id, to which we can attach GraphicsContexts.
Definition graphicsentity.h:16
Definition jobs.h:164
Definition material.h:36
A 4x4 single point precision float matrix.
Definition mat4.h:49
Definition visibilitysystem.h:53
Definition visibilitysystem.h:79
Definition visibilitycontext.h:127
Util::Array< VisibilityModelCommand, 256 > models
Definition visibilitycontext.h:130
uint32_t packetOffset
Definition visibilitycontext.h:128
uint32_t numDrawPackets
Definition visibilitycontext.h:129
Util::Array< VisibilityDrawCommand, 1024 > draws
Definition visibilitycontext.h:131
Definition visibilitycontext.h:120
uint32_t offset
Definition visibilitycontext.h:121
uint32_t baseInstance
Definition visibilitycontext.h:123
uint32_t numInstances
Definition visibilitycontext.h:122
Definition visibilitycontext.h:135
Util::HashTable< const MaterialTemplatesGPULang::Entry *, VisibilityBatchCommand > visibilityTable
Definition visibilitycontext.h:136
Util::Array< Models::ShaderStateNode::DrawPacket * > drawPackets
Definition visibilitycontext.h:137
Definition visibilitycontext.h:108
CoreGraphics::MeshId mesh
Definition visibilitycontext.h:110
Materials::MaterialId material
Definition visibilitycontext.h:112
CoreGraphics::PrimitiveGroup primitiveGroup
Definition visibilitycontext.h:111
uint32_t offset
Definition visibilitycontext.h:109
Definition visibilitysystem.h:63
Definition visibilitysystem.h:58
Definition visibilitysystem.h:71