1#include "Generators/GeneratorMask.h"
2#include "Generators/MaskLayerHelper.h"
3#include "Data/ApplicationState.h"
5#include "imgui/imgui.h"
16 kernel->CreateBuffer(
"mask_items_count", CL_MEM_READ_WRITE,
sizeof(
int));
17 kernel->CreateBuffer(
"mask_items", CL_MEM_READ_WRITE,
sizeof(
GeneratorMask) * MAX_GENERATOR_MASKS);
22GeneratorMaskManager::~GeneratorMaskManager()
29 data[
"type"] = mask.type;
30 data[
"posX"] = mask.pos[0];
31 data[
"posY"] = mask.pos[1];
32 data[
"posZ"] = mask.pos[2];
33 data[
"d1.0"] = mask.d1[0];
34 data[
"d1.1"] = mask.d1[1];
35 data[
"d1.2"] = mask.d1[2];
36 data[
"d1.3"] = mask.d1[3];
37 data[
"d2.0"] = mask.d2[0];
38 data[
"d2.1"] = mask.d2[1];
39 data[
"d2.2"] = mask.d2[2];
40 data[
"d2.3"] = mask.d2[3];
41 data[
"d3.0"] = mask.d3[0];
42 data[
"d3.1"] = mask.d3[1];
43 data[
"d3.2"] = mask.d3[2];
44 data[
"d3.3"] = mask.d3[3];
45 data[
"d4.0"] = mask.d4[0];
46 data[
"d4.1"] = mask.d4[1];
47 data[
"d4.2"] = mask.d4[2];
48 data[
"d4.3"] = mask.d4[3];
55 mask.type = data[
"type"] ;
56 mask.pos[0] = data[
"posX"];
57 mask.pos[1] = data[
"posY"];
58 mask.pos[2] = data[
"posZ"];
59 mask.d1[0] = data[
"d1.0"];
60 mask.d1[1] = data[
"d1.1"];
61 mask.d1[2] = data[
"d1.2"];
62 mask.d1[3] = data[
"d1.3"];
63 mask.d2[0] = data[
"d2.0"];
64 mask.d2[1] = data[
"d2.1"];
65 mask.d2[2] = data[
"d2.2"];
66 mask.d2[3] = data[
"d2.3"];
67 mask.d3[0] = data[
"d3.0"];
68 mask.d3[1] = data[
"d3.1"];
69 mask.d3[2] = data[
"d3.2"];
70 mask.d3[3] = data[
"d3.3"];
71 mask.d4[0] = data[
"d4.0"];
72 mask.d4[1] = data[
"d4.1"];
73 mask.d4[2] = data[
"d4.2"];
74 mask.d4[3] = data[
"d4.3"];
82 data[
"enabled"] = enabled;
83 data[
"gmcount"] = gmcount;
84 data[
"count"] = masks.size();
88 for(
int i=0; i<masks.size(); i++)
90 msks.
push_back(SaveGeneratorMask(masks[i]));
100 enabled = data[
"enabled"];
101 gmcount = data[
"gmcount"];
105 for(
int i=0; i<data[
"count"]; i++)
107 masks.push_back(LoadGeneratorMask(data[
"masks"][i]));
111float GeneratorMaskManager::EvaluateAt(
float x,
float y,
float z,
float value)
115 for(
int i=0; i<masks.size(); i++)
117 if(masks[i].type == MASK_LAYER_HILL)
119 m += EvaluateHillMask(&masks[i], x, y, z);
122 else if(masks[i].type == MASK_LAYER_CRATOR)
124 m += EvaluateCratorMask(&masks[i], x, y, z);
127 else if(masks[i].type == MASK_LAYER_CLIFF)
129 m += EvaluateCliffMask(&masks[i], x, y, z);
135 case GeneratorMask_Additive:
141 case GeneratorMask_AverageAdditive:
143 m = m / (float)masks.size();
148 case GeneratorMask_Multiplicative:
154 case GeneratorMask_AverageMultiplicative:
156 m = m / (float)masks.size();
168void GeneratorMaskManager::ShowSettings()
170 ImGui::Checkbox((
"Enabled##GMSK" + uid).c_str(), &enabled);
172 if (ImGui::BeginCombo(
"Masking Mode##GMSK", generator_mask_type_names[type]))
174 for (
int n = 0; n < IM_ARRAYSIZE(generator_mask_type_names); n++)
176 bool is_selected = (type == n);
178 if (ImGui::Selectable(generator_mask_type_names[n], is_selected))
180 type = (GeneratorMaskType)n;
185 ImGui::SetItemDefaultFocus();
192 for(
int i=0; i<masks.size(); i++)
194 if(ImGui::CollapsingHeader((
"Custom Base Mask Layer " + std::to_string(i) +
"##GMSK" + uid).c_str()))
196 if(masks[i].type == MASK_LAYER_HILL)
198 ShowHillMaskSettingS(&masks[i], uid + std::to_string(i));
201 else if(masks[i].type == MASK_LAYER_CRATOR)
203 ShowCratorMaskSettingS(&masks[i], uid + std::to_string(i));
206 else if(masks[i].type == MASK_LAYER_CLIFF)
208 ShowCliffMaskSettingS(&masks[i], uid + std::to_string(i));
211 if(ImGui::Button((
"Delete##GMSK" + std::to_string(i) + uid).c_str()))
213 while(appState->states.remeshing);
215 masks.erase(masks.begin() + i);
223 if(ImGui::Button((
"Add##GMSK" + uid).c_str()))
225 ImGui::OpenPopup((
"AddMaskLayer##GMSK" + uid).c_str());
228 if(ImGui::BeginPopup((
"AddMaskLayer##GMSK" + uid).c_str()))
230 if(ImGui::Button((
"Hill##GMSK" + uid).c_str()))
233 masks.back().type = MASK_LAYER_HILL;
234 masks.back().d1[0] = masks.back().d1[1] = masks.back().d1[2] = 1.0f;
236 ImGui::CloseCurrentPopup();
239 if(ImGui::Button((
"Crater##GMSK" + uid).c_str()))
242 masks.back().type = MASK_LAYER_CRATOR;
243 masks.back().d1[0] = masks.back().d3[0] = masks.back().d3[1] = 1.0f;
245 ImGui::CloseCurrentPopup();
248 if(ImGui::Button((
"Cliff##GMSK" + uid).c_str()))
251 masks.back().type = MASK_LAYER_CLIFF;
252 masks.back().d1[2] = masks.back().d1[1] = 1.0f;
254 ImGui::CloseCurrentPopup();
void push_back(basic_json &&val)
add an object to an array
a class to store JSON values
@ value
the parser finished reading a JSON value