#pragma once #include namespace mln { namespace style { /** * @brief An interface, wrapping evaluated layer properties. * * It is an abstract base class; concrete derived classes that hold the actual * data are provided for each layer type. */ class LayerProperties { public: virtual ~LayerProperties() = default; /// Returns constants mask for the data-driven properties. virtual unsigned long constantsMask() const { return 0u; } Immutable baseImpl; /// Contains render passes used by the renderer, see `mln::RenderPass`. uint8_t renderPasses = 0u; virtual expression::Dependency getDependencies() const noexcept = 0; protected: LayerProperties(Immutable impl) noexcept : baseImpl(std::move(impl)) {} }; template inline const auto& getEvaluated(const Immutable& properties) noexcept { return static_cast(*properties).evaluated; } template inline const auto& getCrossfade(const Immutable& properties) noexcept { return static_cast(*properties).crossfade; } } // namespace style } // namespace mln