Nebula
Loading...
Searching...
No Matches
cameracontext.h
Go to the documentation of this file.
1#pragma once
2//------------------------------------------------------------------------------
11//------------------------------------------------------------------------------
13#include "camerasettings.h"
15#include "math/scalar.h"
16namespace Graphics
17{
18
20{
21 // Linear view depth. At focusDistance +/- focusRange the radius is maxRadius.
22 float focusDistance = 0.01f;
23 float focusRange = 10.0f;
24 // Full-resolution pixels. The shader caps this at 30.
25 float maxRadius = 15.0f;
26 // Aperture. Blade count 3..8 is a regular iris. Any other count is a disk.
27 float blades = 0.0f;
28 // Radians. 0 puts a vertex on +X.
29 float rotation = 0.0f;
30 // 0 = straight blades, 1 = disk.
31 float roundness = 0.0f;
32 // Aperture intensity, sampled the same way on every bokeh. r is the weight.
33 // InvalidResourceId uses CoreGraphics::White2D.
34 Resources::ResourceId dirtMask;
35};
36
38{
40public:
41
45 virtual ~CameraContext();
46
48 static void Create();
49
51 static void UpdateCameras(const Graphics::FrameContext& ctx);
52
54 static void SetupProjectionFov(const Graphics::GraphicsEntityId id, float aspect, float fov, float znear, float zfar, const Graphics::StageMask = Graphics::PRIMARY_STAGE_MASK);
56 static void SetupOrthographic(const Graphics::GraphicsEntityId id, float width, float height, float znear, float zfar, const Graphics::StageMask = Graphics::PRIMARY_STAGE_MASK);
57
59 static void SetView(const Graphics::GraphicsEntityId id, const Math::mat4& mat);
61 static const Math::mat4& GetView(const Graphics::GraphicsEntityId id);
64
72 static void SetDepthOfField(const Graphics::GraphicsEntityId id, const DepthOfField& dof);
77
81 static void AddLODCamera(const Graphics::GraphicsEntityId id);
83 static void RemoveLODCamera(const Graphics::GraphicsEntityId id);
84
88 static void SetLODCamera(const Graphics::GraphicsEntityId id);
89
90private:
91
92 enum
93 {
100 };
101 typedef Ids::IdAllocator<
103 Math::mat4, // projection
104 Math::mat4, // view-transform
105 Math::mat4, // view-projection
106 Graphics::StageMask, // Mask indicating the stages this camera exists in
110
113
117 static void Dealloc(const Graphics::ContextEntityId id);
118};
119
120//------------------------------------------------------------------------------
128
129//------------------------------------------------------------------------------
132inline void
137
138} // namespace Graphics
static void UpdateCameras(const Graphics::FrameContext &ctx)
runs before frame is updated
Definition cameracontext.cc:48
static const Math::mat4 GetTransform(const Graphics::GraphicsEntityId id)
get transform
Definition cameracontext.cc:111
Ids::IdAllocator< Graphics::CameraSettings, Math::mat4, Math::mat4, Math::mat4, Graphics::StageMask, Graphics::DepthOfField > CameraAllocator
Definition cameracontext.h:108
static void Create()
create context
Definition cameracontext.cc:37
static const Math::mat4 & GetView(const Graphics::GraphicsEntityId id)
get view
Definition cameracontext.cc:101
static const CameraSettings & GetSettings(const Graphics::GraphicsEntityId id)
get settings
Definition cameracontext.cc:141
@ Camera_Projection
Definition cameracontext.h:95
@ Camera_Settings
Definition cameracontext.h:94
@ Camera_View
Definition cameracontext.h:96
@ Camera_ViewProjection
Definition cameracontext.h:97
@ Camera_DepthOfField
Definition cameracontext.h:99
@ Camera_StageMask
Definition cameracontext.h:98
CameraContext()
constructor
Definition cameracontext.cc:20
static Graphics::StageMask GetStageMask(const Graphics::GraphicsEntityId id)
Get stage mask.
Definition cameracontext.cc:174
static void SetView(const Graphics::GraphicsEntityId id, const Math::mat4 &mat)
set view
Definition cameracontext.cc:91
static Graphics::GraphicsEntityId lodCamera
Definition cameracontext.h:112
static const Math::mat4 & GetViewProjection(const Graphics::GraphicsEntityId id)
get view-projection
Definition cameracontext.cc:131
static void SetupProjectionFov(const Graphics::GraphicsEntityId id, float aspect, float fov, float znear, float zfar, const Graphics::StageMask=Graphics::PRIMARY_STAGE_MASK)
setup as projection and fov
Definition cameracontext.cc:65
static void SetLODCamera(const Graphics::GraphicsEntityId id)
set the LOD camera
Definition cameracontext.cc:222
static void SetupOrthographic(const Graphics::GraphicsEntityId id, float width, float height, float znear, float zfar, const Graphics::StageMask=Graphics::PRIMARY_STAGE_MASK)
setup as ortographic
Definition cameracontext.cc:78
static const DepthOfField & GetDepthOfField(const Graphics::GraphicsEntityId id)
focus, circle of confusion, and aperture
Definition cameracontext.cc:164
static Graphics::GraphicsEntityId GetLODCamera()
get the LOD camera
Definition cameracontext.cc:213
static const Math::mat4 & GetProjection(const Graphics::GraphicsEntityId id)
get projection
Definition cameracontext.cc:121
static void RemoveLODCamera(const Graphics::GraphicsEntityId id)
Remove a camera from affecting lod.
Definition cameracontext.cc:202
static void AddLODCamera(const Graphics::GraphicsEntityId id)
Add a camera to affect lod.
Definition cameracontext.cc:193
static CameraAllocator cameraAllocator
Definition cameracontext.h:109
static void Dealloc(const Graphics::ContextEntityId id)
deallocate a slice
Definition cameracontext.h:133
static Util::Array< Graphics::GraphicsEntityId > LodCameras
Definition cameracontext.h:111
static void SetDepthOfField(const Graphics::GraphicsEntityId id, const DepthOfField &dof)
focus, circle of confusion, and aperture
Definition cameracontext.cc:151
static Graphics::ContextEntityId Alloc()
allocate a new slice for this context
Definition cameracontext.h:124
static const Util::Array< Graphics::GraphicsEntityId > & GetLODCameras()
Get all cameras affecting LOD.
Definition cameracontext.cc:184
Definition camerasettings.h:20
Definition graphicscontext.h:175
An ID allocator associates an id with a slice in an N number of arrays.
Definition idallocator.h:39
Ids::Id32 Alloc()
Allocate an object.
Definition idallocator.h:46
void Dealloc(Ids::Id32 index)
Deallocate an object. Just places it in freeids array for recycling.
Definition idallocator.h:64
Nebula's dynamic array class.
Definition array.h:61
Implements the shader server used by Vulkan.
Definition cameramanager.h:22
uint16_t StageMask
Definition view.h:23
Nebula's scalar datatype.
Definition graphicscontext.h:143
Definition cameracontext.h:20
float focusRange
Definition cameracontext.h:23
float focusDistance
Definition cameracontext.h:22
float blades
Definition cameracontext.h:27
float rotation
Definition cameracontext.h:29
float maxRadius
Definition cameracontext.h:25
float roundness
Definition cameracontext.h:31
Resources::ResourceId dirtMask
Definition cameracontext.h:34
Definition graphicsserver.h:63
The graphics entity is only an Id, to which we can attach GraphicsContexts.
Definition graphicsentity.h:16
A 4x4 single point precision float matrix.
Definition mat4.h:49