Files
MapLibreParticleLab/include/mbgl/particle/field/field_projection_materialization.hpp

38 lines
1.2 KiB
C++

#pragma once
#include <mbgl/particle/field/field_binding.hpp>
#include <mbgl/particle/field/field_data_adapter.hpp>
#include <optional>
#include <memory>
#include <variant>
namespace mbgl::particle {
// Renderer-neutral canonical snapshots. QBIN stays confined to ingress and
// field Core; renderers receive only the existing canonical field shape.
enum class MaterializedColorValueSource : uint8_t {
Scalar,
VectorMagnitude,
};
struct MaterializedColorProjection {
std::shared_ptr<const ParticleFieldSnapshot> t0;
std::shared_ptr<const ParticleFieldSnapshot> t1;
ColorProjectionContentIdentity contentIdentity;
FieldSampleState sampleState;
MaterializedColorValueSource valueSource = MaterializedColorValueSource::Scalar;
};
struct MaterializedParticleProjection {
std::shared_ptr<const ParticleFieldSnapshot> t0;
std::shared_ptr<const ParticleFieldSnapshot> t1;
ParticleProjectionContentIdentity contentIdentity;
FieldSampleState sampleState;
};
std::optional<MaterializedColorProjection> materializeColorProjection(const ColorProjection&);
std::optional<MaterializedParticleProjection> materializeParticleProjection(const ParticleProjection&);
} // namespace mbgl::particle