#pragma once #include "ShaderTypes.h" #include #include #include #include class RuntimeStore; struct RuntimeSnapshotVersions { uint64_t renderStateVersion = 0; uint64_t parameterStateVersion = 0; }; class RenderSnapshotBuilder { public: explicit RenderSnapshotBuilder(RuntimeStore& runtimeStore); bool BuildLayerPassFragmentShaderSources(const std::string& layerId, std::vector& passSources, std::string& error) const; unsigned GetMaxTemporalHistoryFrames() const; RuntimeSnapshotVersions GetVersions() const; void AdvanceFrame(); void BuildLayerRenderStates(unsigned outputWidth, unsigned outputHeight, std::vector& states) const; bool TryBuildLayerRenderStates(unsigned outputWidth, unsigned outputHeight, std::vector& states) const; bool TryRefreshLayerParameters(std::vector& states) const; void RefreshDynamicRenderStateFields(std::vector& states) const; void MarkRenderStateDirty(); void MarkParameterStateDirty(); private: void BuildLayerRenderStatesLocked(unsigned outputWidth, unsigned outputHeight, std::vector& states) const; void RefreshLayerParametersLocked(std::vector& states) const; void RefreshDynamicRenderStateFieldsLocked(std::vector& states) const; RuntimeStore& mRuntimeStore; std::atomic mFrameCounter{ 0 }; std::atomic mRenderStateVersion{ 0 }; std::atomic mParameterStateVersion{ 0 }; };