#pragma once

#include "IShader.hpp"
#include "TransformationStack.hpp"
#include "elements/Transformable.hpp"

namespace TSE
{
    class Camera;
    class RenderPipeline;

    class IRenderer
    {
        public:

        inline static TSE::RenderPipeline* pipeline = nullptr;
        static std::vector<Camera*> camerasToRenderWith;

        virtual void End() = 0;
        virtual void Flush() = 0;
        virtual void Begin() = 0;

        virtual void Submit(const Transformable& trans, TransformationStack& stack) = 0;
        virtual void Submit(const Transformable& trans, IShader* shader, TransformationStack& stack) = 0;

        virtual ~IRenderer() = default;
    };
} // namespace TSE
