#pragma once #include "OpenGL.h" enum GLParamFlag { PARAM_IN, PARAM_OUT, PARAM_UNIFORM, PARAM_CONST, PARAM_NONE, }; struct GLParamItem { std::string name; std::string location; std::string value; GLParamItem(const std::string& _name, int _location, const std::string& _value = "") : name(_name) , value(_value) { if (_location > -1) location = "layout (location = " + std::to_string(_location) + ") "; else location = ""; } }; struct GLParamType { const GLParamFlag flag; std::string type; Array items; GLParamType(const GLParamFlag _flag, const std::string& _type) : flag(_flag) , type(_type) { } bool SearchName(const std::string& name) { for(u32 i=0; i params; GLParamType* SearchParam(const std::string& type) { for(u32 i=0; iSearchName(name); } std::string AddParam(const GLParamFlag flag, std::string type, const std::string& name, const std::string& value) { type = GetParamFlag(flag) + type; GLParamType* t = SearchParam(type); if(t) { if(!t->SearchName(name)) t->items.Move(new GLParamItem(name, -1, value)); } else { const u32 num = params.GetCount(); params.Move(new GLParamType(flag, type)); params[num].items.Move(new GLParamItem(name, -1, value)); } return name; } std::string AddParam(const GLParamFlag flag, std::string type, const std::string& name, int location = -1) { type = GetParamFlag(flag) + type; GLParamType* t = SearchParam(type); if(t) { if(!t->SearchName(name)) t->items.Move(new GLParamItem(name, location)); } else { const u32 num = params.GetCount(); params.Move(new GLParamType(flag, type)); params[num].items.Move(new GLParamItem(name, location)); } return name; } };