OpenGothic
Open source reimplementation of Gothic I and II
Loading...
Searching...
No Matches
sceneglobals.h
Go to the documentation of this file.
1#pragma once
2
3#include <Tempest/Matrix4x4>
4#include <Tempest/Vec>
5
7#include "rtscene.h"
8#include "resources.h"
9
10class Sky;
11class WorldView;
12
13class SceneGlobals final {
14 public:
17
18 enum VisCamera : uint8_t {
22 V_Main = 2,
23 V_HiZ = 3,
24 V_Vsm = 4,
26 };
27
28 static bool isShadowView(VisCamera v);
29
30 void setViewProject(const Tempest::Matrix4x4& view, const Tempest::Matrix4x4& proj,
31 float zNear, float zFar,
32 const Tempest::Matrix4x4 *sh);
33 void setViewLwc(const Tempest::Matrix4x4& view, const Tempest::Matrix4x4& proj, const Tempest::Matrix4x4 *sh);
34 void setViewVsm(const Tempest::Matrix4x4& view, const Tempest::Matrix4x4& viewLwc);
35 void setSky(const Sky& s);
36 void setWorld(const WorldView& wview);
37 void setUnderWater(bool w);
38
39 void setTime(uint64_t time);
40 void commitUbo(uint8_t fId);
41 void prepareGlobals(Tempest::Encoder<Tempest::CommandBuffer> &cmd, uint8_t frameId);
42
43 void setResolution(uint32_t w, uint32_t h);
44 void setHiZ(const Tempest::Texture2d& hiZ);
45 void setShadowMap(const Tempest::Texture2d* tex[]);
46
47 void setVirtualShadowMap(bool enabled,
48 const Tempest::ZBuffer& vsmPageData,
49 const Tempest::StorageImage& pageTbl,
50 const Tempest::StorageImage& pageHiZ,
51 const Tempest::StorageBuffer& vsmPageList);
52
53 const Tempest::Matrix4x4& viewProject() const;
54 const Tempest::Matrix4x4& viewProjectInv() const;
55 const Tempest::Matrix4x4& viewShadow(uint8_t view) const;
56 const Tempest::Vec3 clipInfo() const;
57
58 const Tempest::Matrix4x4 viewProjectLwc() const;
59 const Tempest::Matrix4x4 viewProjectLwcInv() const;
60
61 uint64_t tickCount = 0;
62 const Tempest::Texture2d* shadowMap[2] = {};
63
64 Tempest::Matrix4x4 view, proj;
65 Tempest::Matrix4x4 viewLwc;
66 Tempest::Vec3 originLwc;
67 float znear = 0;
68
69 const Tempest::Texture2d* sceneColor = &Resources::fallbackBlack();
70 const Tempest::Texture2d* sceneDepth = &Resources::fallbackBlack();
71 const Tempest::Texture2d* zbuffer = &Resources::fallbackBlack();
72
73 const Tempest::Texture2d* gbufDiffuse = &Resources::fallbackBlack();
74 const Tempest::Texture2d* gbufNormals = &Resources::fallbackBlack();
75
76 const Tempest::Texture2d* hiZ = &Resources::fallbackTexture();
77
78 const Tempest::StorageBuffer* lights = nullptr;
79
80 const Tempest::Texture2d* vsmPageData = nullptr;
81 const Tempest::StorageImage* vsmPageTbl = nullptr;
82 const Tempest::StorageImage* vsmPageHiZ = nullptr;
83 const Tempest::StorageBuffer* vsmPageList = nullptr;
84 bool vsmEnabled = false;
85 Tempest::StorageImage vsmDbg;
86
87 struct UboGlobal final {
88 Tempest::Matrix4x4 viewProject;
89 Tempest::Matrix4x4 viewProjectInv;
91 Tempest::Matrix4x4 viewProjectLwcInv;
93 Tempest::Matrix4x4 viewVirtualShadow;
94 Tempest::Matrix4x4 viewVirtualShadowLwc;
95 Tempest::Matrix4x4 viewProject2VirtualShadow;
96 Tempest::Vec4 vsmDdx, vsmDdy;
97 Tempest::Matrix4x4 view, project, projectInv;
98 Tempest::Vec3 sunDir = {0,0,1};
99 float waveAnim = 0;
100 Tempest::Vec3 lightAmb = {1,1,1};
101 float exposure = 1;
102 Tempest::Vec3 lightCl = {0,0,0};
103 float GSunIntensity = 0;
104 Tempest::Vec4 frustrum[6];
105 Tempest::Vec3 clipInfo;
106 uint32_t tickCount32 = 0;
107 Tempest::Vec3 camPos;
108 float isNight = 0;
109 Tempest::Vec2 screenResInv;
110 Tempest::Vec2 closeupShadowSlice;
111
112 Tempest::Vec3 pfxLeft = {};
113 uint32_t underWater = 0;
114 Tempest::Vec3 pfxTop = {};
115 float luminanceMed = 0;
116 Tempest::Vec3 pfxDepth = {};
117 float plPosY = {};
118 Tempest::Point hiZTileSize = {};
119 Tempest::Point screenRes = {};
120 Tempest::Vec2 cloudsDir[2] = {};
121
122 float probeGridBias = 3;
123 };
124
125 Tempest::UniformBuffer<UboGlobal> uboGlobalPf[Resources::MaxFramesInFlight][V_Count];
126 Tempest::StorageBuffer uboGlobal[V_Count];
127
129
130 bool zWindEnabled = false;
131 Tempest::Vec2 windDir = {0,1};
132 uint64_t windPeriod = 6000;
133
135
136 private:
137 void initSettings();
138
139 UboGlobal uboGlobalCpu;
140 };
141
static const Tempest::Texture2d & fallbackTexture()
@ MaxFramesInFlight
Definition resources.h:48
@ ShadowLayers
Definition resources.h:49
static const Tempest::Texture2d & fallbackBlack()
const Tempest::Texture2d * zbuffer
const Tempest::Matrix4x4 viewProjectLwcInv() const
uint64_t windPeriod
const Tempest::Matrix4x4 & viewShadow(uint8_t view) const
const Tempest::StorageBuffer * vsmPageList
const Tempest::Texture2d * shadowMap[2]
Tempest::Matrix4x4 proj
const Tempest::Texture2d * gbufDiffuse
void setUnderWater(bool w)
Tempest::StorageImage vsmDbg
const Tempest::Matrix4x4 & viewProject() const
Tempest::UniformBuffer< UboGlobal > uboGlobalPf[Resources::MaxFramesInFlight][V_Count]
void setVirtualShadowMap(bool enabled, const Tempest::ZBuffer &vsmPageData, const Tempest::StorageImage &pageTbl, const Tempest::StorageImage &pageHiZ, const Tempest::StorageBuffer &vsmPageList)
const Tempest::Texture2d * gbufNormals
void setViewProject(const Tempest::Matrix4x4 &view, const Tempest::Matrix4x4 &proj, float zNear, float zFar, const Tempest::Matrix4x4 *sh)
void setResolution(uint32_t w, uint32_t h)
Tempest::StorageBuffer uboGlobal[V_Count]
Frustrum frustrum[V_Count]
const Tempest::Texture2d * sceneColor
void setHiZ(const Tempest::Texture2d &hiZ)
Tempest::Matrix4x4 view
RtScene rtScene
const Tempest::Texture2d * hiZ
void commitUbo(uint8_t fId)
const Tempest::StorageImage * vsmPageTbl
void setShadowMap(const Tempest::Texture2d *tex[])
void setViewLwc(const Tempest::Matrix4x4 &view, const Tempest::Matrix4x4 &proj, const Tempest::Matrix4x4 *sh)
const Tempest::Texture2d * vsmPageData
Tempest::Matrix4x4 viewLwc
static bool isShadowView(VisCamera v)
const Tempest::Matrix4x4 & viewProjectInv() const
uint64_t tickCount
Tempest::Vec3 originLwc
const Tempest::StorageBuffer * lights
void setSky(const Sky &s)
void prepareGlobals(Tempest::Encoder< Tempest::CommandBuffer > &cmd, uint8_t frameId)
void setWorld(const WorldView &wview)
void setViewVsm(const Tempest::Matrix4x4 &view, const Tempest::Matrix4x4 &viewLwc)
const Tempest::StorageImage * vsmPageHiZ
const Tempest::Matrix4x4 viewProjectLwc() const
const Tempest::Vec3 clipInfo() const
void setTime(uint64_t time)
Tempest::Vec2 windDir
const Tempest::Texture2d * sceneDepth
Definition sky.h:12
Tempest::Matrix4x4 viewVirtualShadow
Tempest::Matrix4x4 viewShadowLwc[Resources::ShadowLayers]
Tempest::Matrix4x4 viewProjectInv
Tempest::Vec2 closeupShadowSlice
Tempest::Matrix4x4 viewShadow[Resources::ShadowLayers]
Tempest::Matrix4x4 viewProject2VirtualShadow
Tempest::Matrix4x4 view
Tempest::Matrix4x4 projectInv
Tempest::Matrix4x4 viewVirtualShadowLwc
Tempest::Vec2 screenResInv
Tempest::Vec2 cloudsDir[2]
Tempest::Matrix4x4 project
Tempest::Matrix4x4 viewProject
Tempest::Vec4 frustrum[6]
Tempest::Point screenRes
Tempest::Matrix4x4 viewProjectLwcInv
Tempest::Point hiZTileSize