Files
video-shader-toys/apps/RenderCadenceCompositor/runtime/RuntimeShaderBridge.cpp
Aiden 511b67c9bc
All checks were successful
CI / React UI Build (push) Successful in 11s
CI / Native Windows Build And Tests (push) Successful in 2m53s
CI / Windows Release Package (push) Successful in 3m18s
New rules based order
2026-05-12 02:35:15 +10:00

54 lines
1.1 KiB
C++

#include "RuntimeShaderBridge.h"
#include <chrono>
RuntimeShaderBridge::~RuntimeShaderBridge()
{
Stop();
}
void RuntimeShaderBridge::Start(const std::string& shaderId, ArtifactCallback onArtifactReady, ErrorCallback onError)
{
Stop();
if (shaderId.empty())
return;
mOnArtifactReady = std::move(onArtifactReady);
mOnError = std::move(onError);
mStopping.store(false, std::memory_order_release);
mCompiler.StartShaderBuild(shaderId);
mThread = std::thread([this]() { ThreadMain(); });
}
void RuntimeShaderBridge::Stop()
{
mStopping.store(true, std::memory_order_release);
if (mThread.joinable())
mThread.join();
mCompiler.Stop();
mOnArtifactReady = ArtifactCallback();
mOnError = ErrorCallback();
}
void RuntimeShaderBridge::ThreadMain()
{
while (!mStopping.load(std::memory_order_acquire))
{
RuntimeSlangShaderBuild build;
if (mCompiler.TryConsume(build))
{
if (build.succeeded)
{
if (mOnArtifactReady)
mOnArtifactReady(build.artifact);
}
else if (mOnError)
{
mOnError(build.message);
}
return;
}
std::this_thread::sleep_for(std::chrono::milliseconds(5));
}
}