#pragma once

namespace Assets {

class TextAsset;

} // namespace Assets

namespace lt {

class SharedContext;

class Shader
{
public:
	enum Stage : uint8_t
	{
		none = 0,

		vertex,
		pixel,
		geometry,
	};

	static auto create(
	    const Ref<Assets::TextAsset> &vertex_asset,
	    const Ref<Assets::TextAsset> &pixel_asset,
	    const Ref<SharedContext> &shared_context
	) -> Ref<Shader>;

	virtual ~Shader() = default;

	virtual void bind() = 0;

	virtual void un_bind() = 0;

protected:
	Shader() = default;
};

} // namespace lt
