Monopoly — Portage moderne 0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
SequencePlaybackGPU.cpp
Go to the documentation of this file.
4
5#include <algorithm>
6
7#include <SDL3/SDL_log.h>
8
9namespace monopoly::engine
10{
11 std::expected<void, std::string> SequencePlayback::prepareModernMeshes(MeshGPUCache& cache,
12 const std::function<void(const data::MeshRenderData*)>& rejectPack)
13 {
14 bool rejected{};
15 const auto instances = runtime_.meshInstances();
16 for (const auto node : world_.order())
17 {
18 const auto* object = world_.find(node);
19 if (!object || !object->asset ||
20 object->asset->origin != data::MeshAssetOrigin::ModernGltf)
21 continue;
22 const auto uploaded = cache.resolveForScene(object->asset);
23 if (uploaded) continue;
24 if (rejectPack) rejectPack(object->asset->renderData.get());
25 if (data::dataGroup(object->contentsDataId) == ModernEnvironmentLogicalGroup)
26 {
27 const auto* failed = object->asset->renderData.get();
28 std::erase_if(nativeSceneItems_, [&](const auto& item)
29 { return item.asset && item.asset->renderData.get() == failed; });
31 "Optional native decoration upload rejected: %s; decoration disabled",
32 uploaded.error().detail.c_str());
33 rejected = true;
34 continue;
35 }
36 if (meshes_.rejectModernAsset(object->asset->renderData.get()))
38 "Modern GLB DATA 0x%08x GPU upload rejected: %s; using complete retail sequence",
39 static_cast<unsigned>(object->contentsDataId), uploaded.error().detail.c_str());
40 for (const auto& instance : instances)
41 if (instance.node == node)
42 meshes_.rejectModernSequence(instance.rootSequenceDataId);
43 rejected = true;
44 }
45 if (rejected) return publishRuntimeViews();
46 return {};
47 }
48}
bool uploaded
Definition Engine.cpp:170
unsigned index
bool rejectModernAsset(const MeshRenderData *renderData)
void rejectModernSequence(DataId rootSequenceDataId)
std::expected< void, std::string > prepareModernMeshes(MeshGPUCache &cache, const std::function< void(const data::MeshRenderData *)> &rejectPack={})
const SequenceWorld3DObject * find(sequence::SequenceNodeId node) const noexcept
std::vector< sequence::SequenceNodeId > order() const
std::vector< SequenceMeshInstanceView > meshInstances() const
constexpr std::uint16_t dataGroup(DataId id) noexcept
Definition DataBanks.hpp:57
constexpr std::uint16_t ModernEnvironmentLogicalGroup