MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / Generate

Method Generate

Source/Engine/Tools/MaterialGenerator/MaterialGenerator.cpp:152–644  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

150}
151
152bool MaterialGenerator::Generate(WriteStream& source, MaterialInfo& materialInfo, BytesContainer& parametersData)
153{
154 ASSERT_LOW_LAYER(_layers.Count() > 0);
155
156 String inputs[In_MAX];
157 Array<StringAnsiView, FixedAllocation<8>> features;
158
159 // Setup and prepare layers
160 _writer.Clear();
161 _includes.Clear();
162 _callStack.Clear();
163 _parameters.Clear();
164 _localIndex = 0;
165 _vsToPsInterpolants.Clear();
166 _treeLayer = nullptr;
167 _graphStack.Clear();
168 for (int32 i = 0; i < _layers.Count(); i++)
169 {
170 auto layer = _layers[i];
171
172 // Prepare
173 layer->Prepare();
174 prepareLayer(_layers[i], true);
175
176 // Assign layer variable name for initial layers
177 layer->Usage[0].VarName = TEXT("material");
178 if (i != 0)
179 layer->Usage[0].VarName += StringUtils::ToString(i);
180 }
181 inputs[In_VersionNumber] = StringUtils::ToString(MATERIAL_GRAPH_VERSION);
182
183 // Cache data
184 MaterialLayer* baseLayer = GetRootLayer();
185 auto* baseNode = baseLayer->Root;
186 _treeLayerVarName = baseLayer->GetVariableName(nullptr);
187 _treeLayer = baseLayer;
188 _graphStack.Add(&_treeLayer->Graph);
189 const MaterialGraphBox* layerInputBox = baseLayer->Root->GetBox(0);
190 const bool isLayered = layerInputBox->HasConnection();
191
192 // Initialize features
193#define ADD_FEATURE(type) \
194 { \
195 StringAnsiView typeName(#type, ARRAY_COUNT(#type) - 1); \
196 features.Add(typeName); \
197 if (!Features.ContainsKey(typeName)) \
198 { \
199 ScopeLock lock(FeaturesLock); \
200 auto& feature = Features[typeName]; \
201 type::Generate(feature.Data); \
202 if (feature.Init()) \
203 return true; \
204 } else if (COMPILE_WITH_DEV_ENV) Features[typeName].CheckReload(); \
205 }
206 const bool isOpaque = materialInfo.BlendMode == MaterialBlendMode::Opaque;
207 switch (baseLayer->Domain)
208 {
209 case MaterialDomain::Surface:

Callers

nothing calls this directly

Calls 15

EnumHasAnyFlagsFunction · 0.85
ValueEnum · 0.85
EnumHasAllFlagsFunction · 0.85
OnErrorFunction · 0.85
IsInRangeFunction · 0.85
DeleteFunction · 0.85
UpdateFeaturesFlagsMethod · 0.80
AsFloat4Method · 0.80
ToStringFunction · 0.50
StringViewClass · 0.50
CountMethod · 0.45
ClearMethod · 0.45

Tested by

no test coverage detected