OpenGothic
Open source reimplementation of Gothic I and II
Loading...
Searching...
No Matches
worldview.h
Go to the documentation of this file.
1#pragma once
2
3#include <Tempest/Device>
4#include <Tempest/Shader>
5
6#include <zenkit/world/VobTree.hh>
7
12#include "graphics/sky/sky.h"
13#include "lightsource.h"
14#include "lightgroup.h"
15#include "sceneglobals.h"
16#include "visualobjects.h"
17
18class World;
19class Camera;
20class ParticleFx;
21class PackedMesh;
22
23class WorldView {
24 public:
25 WorldView(const World &world, const PackedMesh& wmesh);
26 ~WorldView();
27
28 const LightSource& mainLight() const;
29 const Tempest::Vec3& ambientLight() const;
30 std::pair<Tempest::Vec3, Tempest::Vec3> bbox() const;
31
32 bool isInPfxRange(const Tempest::Vec3& pos) const;
33
34 void tick(uint64_t dt);
35
36 void resetRendering();
37
38 void preFrameUpdate(const Camera& camera, uint64_t tickCount, uint8_t fId);
39 void postFrameupdate();
40
41 void prepareGlobals(Tempest::Encoder<Tempest::CommandBuffer> &cmd, uint8_t fId);
42
43 void setGbuffer(const Tempest::Texture2d& diffuse,
44 const Tempest::Texture2d& norm);
45 void setShadowMaps (const Tempest::Texture2d* shadow[]);
46 void setVirtualShadowMap(bool enabled,
47 const Tempest::ZBuffer& pageData,
48 const Tempest::StorageImage& pageTbl,
49 const Tempest::StorageImage& pageHiZ,
50 const Tempest::StorageBuffer& pageList);
51 void setHiZ(const Tempest::Texture2d& hiZ);
52 void setSceneImages(const Tempest::Texture2d& clr, const Tempest::Texture2d& depthAux, const Tempest::ZBuffer& depthNative);
53
54 void dbgLights (DbgPainter& p) const;
55
56 bool updateLights();
57 bool updateRtScene();
58
59 void updateFrustrum (const Frustrum fr[]);
60 void visibilityPass (Tempest::Encoder<Tempest::CommandBuffer>& cmd, int pass);
61 void visibilityVsm (Tempest::Encoder<Tempest::CommandBuffer>& cmd);
62
63 void drawHiZ (Tempest::Encoder<Tempest::CommandBuffer>& cmd);
64 void drawShadow (Tempest::Encoder<Tempest::CommandBuffer>& cmd, uint8_t frameId, uint8_t layer);
65 void drawVsm (Tempest::Encoder<Tempest::CommandBuffer>& cmd);
66 void drawGBuffer (Tempest::Encoder<Tempest::CommandBuffer>& cmd, uint8_t frameId);
67 void drawWater (Tempest::Encoder<Tempest::CommandBuffer>& cmd);
68 void drawTranslucent(Tempest::Encoder<Tempest::CommandBuffer>& cmd, uint8_t frameId);
69
70 MeshObjects::Mesh addView (std::string_view visual, int32_t headTex, int32_t teethTex, int32_t bodyColor);
71 MeshObjects::Mesh addView (const ProtoMesh* visual);
72 MeshObjects::Mesh addItmView (std::string_view visual, int32_t material);
73 MeshObjects::Mesh addAtachView (const ProtoMesh::Attach& visual, const int32_t version);
74 MeshObjects::Mesh addStaticView(const ProtoMesh* visual, bool staticDraw = false);
75 MeshObjects::Mesh addStaticView(std::string_view visual);
76 MeshObjects::Mesh addDecalView (const zenkit::VisualDecal& vob);
77 LightGroup::Light addLight (const zenkit::VLight& vob);
78 LightGroup::Light addLight (std::string_view preset);
79
80 void dbgClusters(Tempest::Painter& p, Tempest::Vec2 wsz);
81
82 const SceneGlobals& sceneGlobals() const { return sGlobal; }
83 const Sky& sky() const { return gSky; }
84 const Landscape& landscape() const { return land; }
85 const LightGroup& lights() const { return gLights; }
86 const DrawClusters& clusters() const;
87 const DrawCommands& drawCommands() const;
88 const DrawBuckets& drawBuckets() const;
89 auto instanceSsbo() const -> const Tempest::StorageBuffer&;
90
91 private:
92 const World& owner;
93 std::pair<Tempest::Vec3, Tempest::Vec3> aabb;
94 SceneGlobals sGlobal;
95 Sky gSky;
96 LightGroup gLights;
97 VisualObjects visuals;
98
99 MeshObjects objGroup;
100 PfxObjects pfxGroup;
101 Landscape land;
102
103 bool needToUpdateCmd(uint8_t frameId) const;
104 void invalidateCmd();
105
106 friend class LightGroup::Light;
107 friend class PfxEmitter;
108 friend class TrlObjects;
109 };
Definition sky.h:12
void prepareGlobals(Tempest::Encoder< Tempest::CommandBuffer > &cmd, uint8_t fId)
Definition worldview.cpp:73
void resetRendering()
Definition worldview.cpp:43
const DrawBuckets & drawBuckets() const
void setShadowMaps(const Tempest::Texture2d *shadow[])
Definition worldview.cpp:85
void tick(uint64_t dt)
Definition worldview.cpp:38
MeshObjects::Mesh addStaticView(const ProtoMesh *visual, bool staticDraw=false)
void drawShadow(Tempest::Encoder< Tempest::CommandBuffer > &cmd, uint8_t frameId, uint8_t layer)
MeshObjects::Mesh addDecalView(const zenkit::VisualDecal &vob)
void setHiZ(const Tempest::Texture2d &hiZ)
void drawGBuffer(Tempest::Encoder< Tempest::CommandBuffer > &cmd, uint8_t frameId)
void drawTranslucent(Tempest::Encoder< Tempest::CommandBuffer > &cmd, uint8_t frameId)
MeshObjects::Mesh addView(std::string_view visual, int32_t headTex, int32_t teethTex, int32_t bodyColor)
MeshObjects::Mesh addAtachView(const ProtoMesh::Attach &visual, const int32_t version)
friend class TrlObjects
Definition worldview.h:108
const Sky & sky() const
Definition worldview.h:83
LightGroup::Light addLight(const zenkit::VLight &vob)
const SceneGlobals & sceneGlobals() const
Definition worldview.h:82
auto instanceSsbo() const -> const Tempest::StorageBuffer &
MeshObjects::Mesh addItmView(std::string_view visual, int32_t material)
const Tempest::Vec3 & ambientLight() const
Definition worldview.cpp:26
const DrawClusters & clusters() const
void postFrameupdate()
const Landscape & landscape() const
Definition worldview.h:84
void dbgLights(DbgPainter &p) const
void visibilityPass(Tempest::Encoder< Tempest::CommandBuffer > &cmd, int pass)
void drawHiZ(Tempest::Encoder< Tempest::CommandBuffer > &cmd)
void drawVsm(Tempest::Encoder< Tempest::CommandBuffer > &cmd)
void setGbuffer(const Tempest::Texture2d &diffuse, const Tempest::Texture2d &norm)
Definition worldview.cpp:79
bool isInPfxRange(const Tempest::Vec3 &pos) const
Definition worldview.cpp:34
void setSceneImages(const Tempest::Texture2d &clr, const Tempest::Texture2d &depthAux, const Tempest::ZBuffer &depthNative)
void visibilityVsm(Tempest::Encoder< Tempest::CommandBuffer > &cmd)
bool updateLights()
bool updateRtScene()
std::pair< Tempest::Vec3, Tempest::Vec3 > bbox() const
Definition worldview.cpp:30
const DrawCommands & drawCommands() const
void updateFrustrum(const Frustrum fr[])
void preFrameUpdate(const Camera &camera, uint64_t tickCount, uint8_t fId)
Definition worldview.cpp:47
void drawWater(Tempest::Encoder< Tempest::CommandBuffer > &cmd)
void setVirtualShadowMap(bool enabled, const Tempest::ZBuffer &pageData, const Tempest::StorageImage &pageTbl, const Tempest::StorageImage &pageHiZ, const Tempest::StorageBuffer &pageList)
Definition worldview.cpp:94
const LightSource & mainLight() const
Definition worldview.cpp:22
void dbgClusters(Tempest::Painter &p, Tempest::Vec2 wsz)
const LightGroup & lights() const
Definition worldview.h:85
friend class LightGroup::Light
Definition worldview.h:106
Definition world.h:31