23 :owner(&owner),id(id){}
29 std::swap(obj.owner,owner);
30 std::swap(obj.id,
id);
35 owner->free(this->
id);
38 bool isEmpty()
const {
return owner==
nullptr; }
43 void setWind (zenkit::AnimationType m,
float intensity);
44 void startMMAnim (std::string_view anim,
float intensity, uint64_t timeUntil);
50 std::pair<uint32_t,uint32_t>
meshSlice()
const;
66 auto instanceSsbo() const -> const Tempest::StorageBuffer&;
75 void prepareGlobals (Tempest::Encoder<Tempest::CommandBuffer>& cmd, uint8_t fId);
78 void visibilityPass (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
int pass);
79 void visibilityVsm (Tempest::Encoder<Tempest::CommandBuffer>& cmd);
82 void drawWater (Tempest::Encoder<Tempest::CommandBuffer>& cmd);
83 void drawGBuffer (Tempest::Encoder<Tempest::CommandBuffer>& cmd);
84 void drawShadow (Tempest::Encoder<Tempest::CommandBuffer>& cmd,
int layer);
85 void drawVsm (Tempest::Encoder<Tempest::CommandBuffer>& cmd);
86 void drawHiZ (Tempest::Encoder<Tempest::CommandBuffer>& cmd);
90 void dbgClusters(Tempest::Painter& p, Tempest::Vec2 wsz);
99 uint64_t timeStart = 0;
100 uint64_t timeUntil = 0;
105 bool isEmpty()
const {
return cmdId==uint16_t(-1); }
107 Tempest::Matrix4x4 pos;
114 uint32_t animPtr = 0;
116 uint16_t cmdId = uint16_t(-1);
117 uint32_t clusterId = 0;
118 uint64_t timeShift = 0;
122 zenkit::AnimationType wind = zenkit::AnimationType::NONE;
123 float windIntensity = 0;
125 bool isGhost =
false;
128 void preFrameUpdateWind();
129 void preFrameUpdateMorph();
132 void free(
size_t id);
134 uint32_t clusterId(
const PackedMesh::Cluster* cx,
size_t firstMeshlet,
size_t meshletCount, uint16_t bucketId, uint16_t commandId);
135 uint32_t clusterId(
const DrawBuckets::Bucket& bucket,
size_t firstMeshlet,
size_t meshletCount, uint16_t bucketId, uint16_t commandId);
137 void startMMAnim(
size_t i, std::string_view animName,
float intensity, uint64_t timeUntil);
138 void setAsGhost(
size_t i,
bool g);
141 void updateInstance(
size_t id, Tempest::Matrix4x4* pos =
nullptr);
142 void updateRtAs(
size_t id);
154 std::vector<Object> objects;
155 std::unordered_set<size_t> objectsWind;
156 std::unordered_set<size_t> objectsMorph;
157 std::unordered_set<size_t> objectsFree;