#pragma once #include "../runtime/RuntimeLayerModel.h" #include "RuntimeShaderRenderer.h" #include #include #include #include class RuntimeRenderScene { public: RuntimeRenderScene() = default; RuntimeRenderScene(const RuntimeRenderScene&) = delete; RuntimeRenderScene& operator=(const RuntimeRenderScene&) = delete; ~RuntimeRenderScene(); bool CommitRenderLayers(const std::vector& layers, std::string& error); bool HasLayers() const { return !mLayerOrder.empty(); } void RenderFrame(uint64_t frameIndex, unsigned width, unsigned height); void ShutdownGl(); private: struct LayerProgram { std::string layerId; std::string shaderId; std::string sourceFingerprint; std::unique_ptr renderer; }; LayerProgram* FindLayer(const std::string& layerId); const LayerProgram* FindLayer(const std::string& layerId) const; static std::string Fingerprint(const RuntimeShaderArtifact& artifact); std::vector mLayers; std::vector mLayerOrder; };