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