#pragma once
#include "asset/asset.h"
namespace engineapi {
	class ShaderProgram : public Resource<ShaderProgram> {};
	class Shader : public Asset {
	private:
		REFL_FRIEND(Shader)
		uint32_t mId;
		ShaderInfo mInfo;
		UPROPERTY()
		RscHandle<ShaderProgram> mVert;
		UPROPERTY()
		RscHandle<ShaderProgram> mFrag;
		friend class Scene;
	public:
		Shader();
		~Shader();
		uint32_t& GetID() {
			return mId;
		}
		ShaderInfo& GetInfo() {
			return mInfo;
		}
		template<typename T = ShaderProgram>
		RscHandle<T> GetVertHandle() {
			return mVert;
		}
		template<typename T = ShaderProgram>
		RscHandle<T> GetFragHandle() {
			return mFrag;
		}
	};
};
#include "shader_gen.inl"