#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 &vertex_asset, const Ref &pixel_asset, const Ref &shared_context ) -> Ref; virtual ~Shader() = default; virtual void bind() = 0; virtual void un_bind() = 0; protected: Shader() = default; }; } // namespace lt