#pragma once #include "RenderSnapshotBuilder.h" #include #include #include struct RuntimeRenderStateSnapshot { RuntimeSnapshotVersions versions; unsigned outputWidth = 0; unsigned outputHeight = 0; std::vector states; }; class RuntimeSnapshotProvider { public: explicit RuntimeSnapshotProvider(RenderSnapshotBuilder& renderSnapshotBuilder); bool BuildLayerPassFragmentShaderSources(const std::string& layerId, std::vector& passSources, std::string& error) const; unsigned GetMaxTemporalHistoryFrames() const; RuntimeSnapshotVersions GetVersions() const; void AdvanceFrame(); RuntimeRenderStateSnapshot PublishRenderStateSnapshot(unsigned outputWidth, unsigned outputHeight) const; bool TryPublishRenderStateSnapshot(unsigned outputWidth, unsigned outputHeight, RuntimeRenderStateSnapshot& snapshot) const; bool TryRefreshPublishedSnapshotParameters(RuntimeRenderStateSnapshot& snapshot) const; void RefreshDynamicRenderStateFields(std::vector& states) const; private: bool TryGetPublishedRenderStateSnapshot(unsigned outputWidth, unsigned outputHeight, const RuntimeSnapshotVersions& versions, RuntimeRenderStateSnapshot& snapshot) const; void StorePublishedRenderStateSnapshot(const RuntimeRenderStateSnapshot& snapshot) const; static bool SnapshotMatches(const RuntimeRenderStateSnapshot& snapshot, unsigned outputWidth, unsigned outputHeight, const RuntimeSnapshotVersions& versions); RenderSnapshotBuilder& mRenderSnapshotBuilder; mutable std::mutex mPublishedSnapshotMutex; mutable bool mHasPublishedRenderStateSnapshot = false; mutable RuntimeRenderStateSnapshot mPublishedRenderStateSnapshot; };