3
0

MaterialPipelineScriptRunner.h 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #pragma once
  9. #include <Atom/RPI.Edit/Material/MaterialPipelineSourceData.h>
  10. #include <AzCore/IO/Path/Path.h>
  11. namespace AZ
  12. {
  13. class ReflectContext;
  14. namespace RPI
  15. {
  16. class MaterialTypeSourceData;
  17. class MaterialPipelineScriptRunner
  18. {
  19. public:
  20. using ShaderTemplatesList = AZStd::vector<MaterialPipelineSourceData::ShaderTemplate>;
  21. MaterialPipelineScriptRunner();
  22. static void Reflect(ReflectContext* context);
  23. bool RunScript(const AZ::IO::Path& materialPipelineFile, const MaterialPipelineSourceData& materialPipeline, const MaterialTypeSourceData& materialType);
  24. void Reset();
  25. const ShaderTemplatesList& GetRelevantShaderTemplates() const;
  26. private:
  27. class ScriptExecutionContext
  28. {
  29. public:
  30. AZ_TYPE_INFO(ScriptExecutionContext, "{DB3E5775-40FB-4F68-BCF4-4E21649F2316}");
  31. static void Reflect(ReflectContext* context);
  32. ScriptExecutionContext(const MaterialTypeSourceData& materialType, const ShaderTemplatesList& availableShaderTemplates);
  33. AZStd::string GetLightingModelName() const;
  34. void IncludeAllShaders();
  35. void ExcludeAllShaders();
  36. void IncludeShader(const char* shaderTemplateName);
  37. void ExcludeShader(const char* shaderTemplateName);
  38. ShaderTemplatesList GetIncludedShaderTemplates() const;
  39. private:
  40. struct ShaderTemplateInfo
  41. {
  42. MaterialPipelineSourceData::ShaderTemplate m_template;
  43. bool m_isIncluded;
  44. };
  45. using ShaderTemplateStatusMap = AZStd::unordered_map<AZStd::string/*shaderTemplateName*/, ShaderTemplateInfo>;
  46. ShaderTemplateStatusMap::iterator GetShaderStatusIterator(const AZStd::string& shaderTemplateName);
  47. void SetIncludeShader(const AZStd::string& shaderTemplateName, bool include);
  48. const MaterialTypeSourceData& m_materialType;
  49. ShaderTemplateStatusMap m_shaderTemplateStatusMap;
  50. };
  51. static constexpr char const DebugName[] = "MaterialPipelineScriptRunner";
  52. // TODO(MaterialPipeline): I think I want to rename this to something better, maybe "MaterialTypeBuilderSetup" since
  53. // what it's really configuring is the behavior of the MaterialTypeBuilder.
  54. static constexpr char const MainFunctionName[] = "MaterialTypeSetup";
  55. ShaderTemplatesList m_relevantShaderTemplates;
  56. };
  57. } // namespace RPI
  58. } // namespace AZ