#pragma once

#include "Types.hpp"
#include "Matrix4x4.hpp"
#include "Vector2.hpp"
#include "Vector3.hpp"
#include "Vector4.hpp"

namespace TSE
{
    class IShader
    {
        public:
        
        virtual void Bind() const = 0;
        virtual void Unbind() const = 0;

        virtual void SetUniform(const char* name, int value) = 0;
        virtual void SetUniform(const char* name, const int* value, int count) = 0;
        virtual void SetUniform(const char* name, const Matrix4x4* value) = 0;
        virtual void SetUniform(const char* name, float value) = 0;
        virtual void SetUniform(const char* name, const float* value, int count) = 0;
        virtual void SetUniform(const char* name, const Vector2* value) = 0;
        virtual void SetUniform(const char* name, const Vector3* value) = 0;
        virtual void SetUniform(const char* name, const Vector4* value) = 0;

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