Monopoly — Portage moderne 0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
SequenceRenderData.cpp
Go to the documentation of this file.
2
3namespace monopoly::sequence
4{
5 std::expected<std::vector<SequenceMeshRenderItem>, SequenceRenderDataError>
8 {
9 std::vector<SequenceMeshRenderItem> result;
10 const auto instances = runtime.meshInstances();
11 result.reserve(instances.size());
12 for (const auto& instance : instances)
13 {
14 auto asset = meshes.resolve(
15 instance.contentsDataId,
16 instance.rootSequenceDataId,
17 instance.rootSequencePriority);
18 if (!asset)
19 {
20 return std::unexpected(SequenceRenderDataError{
22 instance.node, instance.contentsDataId, asset.error()});
23 }
24 std::shared_ptr<const data::MeshRenderData> renderData = (*asset)->renderData;
25 if ((instance.meshChoice.meshIndexA != 0 ||
26 instance.meshChoice.meshIndexB != 0) &&
27 (*asset)->mesh)
28 {
29 auto evaluated = data::makeMeshRenderData(*(*asset)->mesh,
30 instance.meshChoice.meshIndexA, instance.meshChoice.meshIndexB,
31 instance.meshChoice.meshProportion);
32 if (!evaluated)
33 {
34 return std::unexpected(SequenceRenderDataError{
36 instance.node, instance.contentsDataId, evaluated.error()});
37 }
38 renderData = std::make_shared<const data::MeshRenderData>(
39 std::move(*evaluated));
40 }
41 // Static modern assets deliberately keep their base render data
42 // while legacy MIMe pose selection continues to drive only HMD.
43 // The glTF morph adapter will consume this same meshChoice later.
44 result.push_back({instance.node, instance.contentsDataId,
45 instance.rootSequenceDataId,
46 instance.priority, instance.clock, instance.worldTransform,
47 std::move(*asset), instance.meshChoice, instance.bounds,
48 std::move(renderData), instance.rootSequencePriority});
49 }
50 return result;
51 }
52}
fonts::Runtime & runtime
unsigned index
MeshRenderData makeMeshRenderData(const MeshXRuntime &mesh)
std::expected< std::vector< SequenceMeshRenderItem >, SequenceRenderDataError > collectSequenceMeshRenderData(const SequenceRuntime &runtime, data::MeshRuntimeCache &meshes)