#pragma once

#include "Shader.hpp"
#include "Types.hpp"
#include <map>

namespace TSE::OpenGL
{
    class BasicTextureShader : public Shader
    {
    private:
        static BasicTextureShader* instance;
        static std::map<uint, float> textureSlots;

    public:
        static BasicTextureShader* Instance();
        static void Destroy();
        static void Init(float width, float height);
        BasicTextureShader(std::vector<std::unique_ptr<ShaderPart>>&& parts);

    protected:
        void OnEnable() const override;
        void OnDisable() const override;
        void OnFlush() override;
        void OnDrawCall(int indexCount) override;
        void OnSubmit(const Transformable& t, float*& target, TransformationStack& stack, void (*restartDrawcall)(IRenderer&), IRenderer& rnd) override;
    };
} // namespace TSE::OpenGL
