90{
91 ImGui::Begin("Foliage Manager", pOpen);
92 int id = 0;
93
95 {
96 ImGui::PushID(id++);
97 ImGui::Text("Name : %s", item->name.data());
98
99 if(ImGui::ImageButton((ImTextureID)item->albedo->GetRendererID(), ImVec2(50, 50)))
100 {
101 item->albedo = LoadTextureFromFile(item->albedo);
102 }
103
104 ImGui::SameLine();
105
106 if(ImGui::ImageButton((ImTextureID)item->normal->GetRendererID(), ImVec2(50, 50)))
107 {
108 item->normal = LoadTextureFromFile(item->normal);
109 }
110
111 ImGui::SameLine();
112
113 if(ImGui::ImageButton((ImTextureID)item->ao->GetRendererID(), ImVec2(50, 50)))
114 {
115 item->ao = LoadTextureFromFile(item->ao);
116 }
117
118 if(ImGui::ImageButton((ImTextureID)item->metallic->GetRendererID(), ImVec2(50, 50)))
119 {
120 item->metallic = LoadTextureFromFile(item->metallic);
121 }
122
123 ImGui::SameLine();
124
125 if(ImGui::ImageButton((ImTextureID)item->roughness->GetRendererID(), ImVec2(50, 50)))
126 {
127 item->roughness = LoadTextureFromFile(item->roughness);
128 }
129
130 ImGui::DragFloat3("Position##FItem", glm::value_ptr(item->model->position), 0.1f);
131 ImGui::DragFloat3("Rotation##FItem", glm::value_ptr(item->model->rotation), 0.1f);
132 ImGui::DragFloat3("Scale##FItem", glm::value_ptr(item->model->scale), 0.1f);
133 ImGui::Separator();
134 ImGui::PopID();
135 }
136
137 if(ImGui::Button("Add Item"))
138 {
139 std::string path = ShowOpenFileDialog(".obj\0.fbx\0.gltf\0");
140
141 if(path.size() > 3)
142 {
143 foliageItems.push_back(
new FoliageItem(appState->constants.texturesDir + PATH_SEPARATOR
"white.png"));
144 foliageItems.back()->name = path.substr(path.find(PATH_SEPARATOR) + 1);
145 foliageItems.back()->model = LoadModel(path);
146 foliageItems.back()->model->SetupMeshOnGPU();
147 foliageItems.back()->model->UploadToGPU();
148 }
149
150 else
151 {
152 Log("Invalid Path : " + path);
153 }
154 }
155
156 if(ImGui::Button("Reset Shaders"))
157 {
158 delete appState->shaders.foliage;
159 bool res = false;
160 appState->shaders.foliage =
new Shader(ReadShaderSourceFile(appState->constants.shadersDir + PATH_SEPARATOR
"foliage" PATH_SEPARATOR
"vert.glsl", &res),
161 ReadShaderSourceFile(appState->constants.shadersDir + PATH_SEPARATOR "foliage" PATH_SEPARATOR "frag.glsl", &res),
162 ReadShaderSourceFile(appState->constants.shadersDir + PATH_SEPARATOR "foliage" PATH_SEPARATOR "geom.glsl", &res));
163 }
164
165 ImGui::End();
166}