#pragma once #include "VideoIOTypes.h" #include class OpenGLRenderer; class RuntimeHost; struct RenderPipelineFrameContext { VideoIOState videoState; VideoIOCompletion completion; }; class OpenGLRenderPipeline { public: using RenderEffectCallback = std::function; using OutputReadyCallback = std::function; using PaintCallback = std::function; OpenGLRenderPipeline( OpenGLRenderer& renderer, RuntimeHost& runtimeHost, RenderEffectCallback renderEffect, OutputReadyCallback outputReady, PaintCallback paint); bool RenderFrame(const RenderPipelineFrameContext& context, VideoIOOutputFrame& outputFrame); private: void PackOutputFor10Bit(const VideoIOState& state); void ReadOutputFrame(const VideoIOState& state, VideoIOOutputFrame& outputFrame); OpenGLRenderer& mRenderer; RuntimeHost& mRuntimeHost; RenderEffectCallback mRenderEffect; OutputReadyCallback mOutputReady; PaintCallback mPaint; };