diff --git a/src/services/impl/workflow_frame_render_step.cpp b/src/services/impl/workflow_frame_render_step.cpp new file mode 100644 index 0000000..d5f6af3 --- /dev/null +++ b/src/services/impl/workflow_frame_render_step.cpp @@ -0,0 +1,35 @@ +#include "workflow_frame_render_step.hpp" +#include "workflow_step_io_resolver.hpp" + +#include + +namespace sdl3cpp::services::impl { + +WorkflowFrameRenderStep::WorkflowFrameRenderStep(std::shared_ptr renderService, + std::shared_ptr logger) + : renderService_(std::move(renderService)), + logger_(std::move(logger)) {} + +std::string WorkflowFrameRenderStep::GetPluginId() const { + return "frame.render"; +} + +void WorkflowFrameRenderStep::Execute(const WorkflowStepDefinition& step, WorkflowContext& context) { + if (!renderService_) { + throw std::runtime_error("frame.render requires an IRenderCoordinatorService"); + } + WorkflowStepIoResolver resolver; + const std::string elapsedKey = resolver.GetRequiredInputKey(step, "elapsed"); + const auto* elapsed = context.TryGet(elapsedKey); + if (!elapsed) { + throw std::runtime_error("frame.render missing elapsed input"); + } + renderService_->RenderFrame(static_cast(*elapsed)); + if (logger_) { + logger_->Trace("WorkflowFrameRenderStep", "Execute", + "elapsed=" + std::to_string(*elapsed), + "Render frame complete"); + } +} + +} // namespace sdl3cpp::services::impl diff --git a/src/services/impl/workflow_frame_render_step.hpp b/src/services/impl/workflow_frame_render_step.hpp new file mode 100644 index 0000000..06bdeb1 --- /dev/null +++ b/src/services/impl/workflow_frame_render_step.hpp @@ -0,0 +1,24 @@ +#pragma once + +#include "../interfaces/i_workflow_step.hpp" +#include "../interfaces/i_logger.hpp" +#include "../interfaces/i_render_coordinator_service.hpp" + +#include + +namespace sdl3cpp::services::impl { + +class WorkflowFrameRenderStep final : public IWorkflowStep { +public: + WorkflowFrameRenderStep(std::shared_ptr renderService, + std::shared_ptr logger); + + std::string GetPluginId() const override; + void Execute(const WorkflowStepDefinition& step, WorkflowContext& context) override; + +private: + std::shared_ptr renderService_; + std::shared_ptr logger_; +}; + +} // namespace sdl3cpp::services::impl