#pragma once class slang_handle; class shader { public: virtual ~shader() = default; explicit shader(const std::shared_ptr& handle) : handle_(handle) {} virtual bool init() { return false; } [[nodiscard]] virtual bool is_initialized() const = 0; [[nodiscard]] virtual bool is_valid() const { return handle_ != nullptr && is_initialized(); } // param setters // virtual void set_int(const char* name, int value) = 0; protected: std::shared_ptr handle_; };