#pragma once #include "util.h" enum class kShaderUniform : uint16_t { MVP = const_hash("mvp"), Tex = const_hash("tex"), Col = const_hash("col"), Tof = const_hash("texoff"), Tsz = const_hash("texsz"), }; class Shader { std::map m_umap; GLuint prog; public: bool create(const char* vertex, const char* fragment); void use(); void u_vec4(kShaderUniform id, const glm::vec4& v); void u_vec2(kShaderUniform id, const glm::vec2& v); void u_mat4(kShaderUniform id, const glm::mat4& m); void u_int(kShaderUniform id, int i); }; enum class kShader : uint16_t { Color = const_hash("color"), Texture = const_hash("texture"), UVs = const_hash("uvs"), Font = const_hash("font"), }; class ShaderManager { static std::map m_shaders; static Shader* m_current; public: static bool create(kShader id, const char* vertex, const char* fragment); static void use(kShader id); static void use(const char* name); static void u_vec4(kShaderUniform id, const glm::vec4& v); static void u_vec2(kShaderUniform id, const glm::vec2& v); static void u_mat4(kShaderUniform id, const glm::mat4& m); static void u_int(kShaderUniform id, int i); };