#pragma once #include "RuntimeShaderArtifact.h" #include "RuntimeSlangShaderCompiler.h" #include #include #include #include class RuntimeShaderBridge { public: using ArtifactCallback = std::function; using ErrorCallback = std::function; RuntimeShaderBridge() = default; RuntimeShaderBridge(const RuntimeShaderBridge&) = delete; RuntimeShaderBridge& operator=(const RuntimeShaderBridge&) = delete; ~RuntimeShaderBridge(); void Start(const std::string& shaderId, ArtifactCallback onArtifactReady, ErrorCallback onError); void Start(const std::string& layerId, const std::string& shaderId, ArtifactCallback onArtifactReady, ErrorCallback onError); void RequestStop(); void Stop(); bool CanStopWithoutWaiting() const; private: void ThreadMain(); RuntimeSlangShaderCompiler mCompiler; std::thread mThread; std::atomic mStopping{ false }; std::atomic mFinished{ true }; std::string mLayerId; ArtifactCallback mOnArtifactReady; ErrorCallback mOnError; };