3#include <Tempest/Application>
9using namespace Tempest;
12 : owner(world),aabb(wmesh.bbox()),gSky(sGlobal,world),gLights(sGlobal),visuals(sGlobal,wmesh.bbox()),
13 objGroup(visuals),pfxGroup(*this,sGlobal,visuals),land(visuals,wmesh) {
64 pfxGroup.
tick(tickCount);
65 gLights.
tick(tickCount);
82 sGlobal.
setResolution(uint32_t(diffuse.w()),uint32_t(diffuse.h()));
88 if(sh[i]==
nullptr || sh[i]->isEmpty())
95 const Tempest::ZBuffer& pageData,
96 const Tempest::StorageImage& pageTbl,
97 const Tempest::StorageImage& pageHiZ,
98 const Tempest::StorageBuffer& pageList) {
109 sGlobal.
zbuffer = &textureCast<const Texture2d&>(depthNative);
122 cmd.setDebugMarker(
"Visibility");
165 bool staticDraw =
false;
200 auto l = gLights.
add(vob);
206 auto l = gLights.
add(preset);
Tempest::Matrix4x4 viewShadowLwc(const Tempest::Vec3 &ldir, size_t layer) const
Tempest::Matrix4x4 view() const
Tempest::Matrix4x4 projective() const
Tempest::Matrix4x4 viewLwc() const
Tempest::Matrix4x4 viewShadowVsm(const Tempest::Vec3 &ldir) const
Tempest::Matrix4x4 viewShadow(const Tempest::Vec3 &ldir, size_t layer) const
Tempest::Matrix4x4 viewShadowVsmLwc(const Tempest::Vec3 &ldir) const
Tempest::Vec3 originLwc() const
static auto options() -> const Options &
void setTimeOffset(uint64_t t)
auto & lightsSsbo() const
Light add(const zenkit::LightPreset &vob)
void prepareGlobals(Tempest::Encoder< Tempest::CommandBuffer > &cmd, uint8_t fId)
void dbgLights(DbgPainter &p) const
Tempest::Vec3 dir() const
void preFrameUpdate(uint8_t fId)
void tick(uint64_t ticks)
void drawGBuffer(Tempest::Encoder< Tempest::CommandBuffer > &cmd, uint8_t fId)
void drawShadow(Tempest::Encoder< Tempest::CommandBuffer > &cmd, uint8_t fId, int layer)
void setViewerPos(const Tempest::Vec3 &pos)
bool isInPfxRange(const Tempest::Vec3 &pos) const
void drawTranslucent(Tempest::Encoder< Tempest::CommandBuffer > &cmd, uint8_t fId)
static const ProtoMesh * loadMesh(std::string_view name)
static Tempest::Device & device()
static const Tempest::Texture2d & fallbackBlack()
static const ProtoMesh * decalMesh(const zenkit::VisualDecal &decal)
const Tempest::Texture2d * zbuffer
const Tempest::Texture2d * gbufDiffuse
void setUnderWater(bool w)
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)
Frustrum frustrum[V_Count]
const Tempest::Texture2d * sceneColor
void setHiZ(const Tempest::Texture2d &hiZ)
void commitUbo(uint8_t fId)
void setShadowMap(const Tempest::Texture2d *tex[])
void setViewLwc(const Tempest::Matrix4x4 &view, const Tempest::Matrix4x4 &proj, const Tempest::Matrix4x4 *sh)
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)
void setTime(uint64_t time)
const Tempest::Texture2d * sceneDepth
const Tempest::Vec3 & ambientLight() const
void updateLight(const int64_t now)
const LightSource & sunLight() const
bool updateRtScene(RtScene &out)
const DrawClusters & clusters() const
auto instanceSsbo() const -> const Tempest::StorageBuffer &
void drawGBuffer(Tempest::Encoder< Tempest::CommandBuffer > &cmd)
void visibilityVsm(Tempest::Encoder< Tempest::CommandBuffer > &cmd)
void dbgClusters(Tempest::Painter &p, Tempest::Vec2 wsz)
void prepareGlobals(Tempest::Encoder< Tempest::CommandBuffer > &cmd, uint8_t fId)
void drawHiZ(Tempest::Encoder< Tempest::CommandBuffer > &cmd)
void visibilityPass(Tempest::Encoder< Tempest::CommandBuffer > &cmd, int pass)
void drawWater(Tempest::Encoder< Tempest::CommandBuffer > &cmd)
const DrawBuckets & drawBuckets() const
const DrawCommands & drawCommands() const
void drawTranslucent(Tempest::Encoder< Tempest::CommandBuffer > &cmd)
void drawVsm(Tempest::Encoder< Tempest::CommandBuffer > &cmd)
void drawShadow(Tempest::Encoder< Tempest::CommandBuffer > &cmd, int layer)
void prepareGlobals(Tempest::Encoder< Tempest::CommandBuffer > &cmd, uint8_t fId)
const DrawBuckets & drawBuckets() const
void setShadowMaps(const Tempest::Texture2d *shadow[])
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)
LightGroup::Light addLight(const zenkit::VLight &vob)
auto instanceSsbo() const -> const Tempest::StorageBuffer &
MeshObjects::Mesh addItmView(std::string_view visual, int32_t material)
const Tempest::Vec3 & ambientLight() const
const DrawClusters & clusters() const
WorldView(const World &world, const PackedMesh &wmesh)
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)
bool isInPfxRange(const Tempest::Vec3 &pos) const
void setSceneImages(const Tempest::Texture2d &clr, const Tempest::Texture2d &depthAux, const Tempest::ZBuffer &depthNative)
void visibilityVsm(Tempest::Encoder< Tempest::CommandBuffer > &cmd)
std::pair< Tempest::Vec3, Tempest::Vec3 > bbox() const
const DrawCommands & drawCommands() const
void updateFrustrum(const Frustrum fr[])
void preFrameUpdate(const Camera &camera, uint64_t tickCount, uint8_t fId)
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)
const LightSource & mainLight() const
void dbgClusters(Tempest::Painter &p, Tempest::Vec2 wsz)
uint64_t tickCount() const
GameSession & gameSession() const