Без опису
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

TargetSetupContext.cs 3.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4. namespace UnityEditor.ShaderGraph
  5. {
  6. [GenerationAPI]
  7. internal class TargetSetupContext
  8. {
  9. public List<SubShaderDescriptor> subShaders { get; private set; }
  10. public KernelCollection kernels { get; private set; }
  11. public AssetCollection assetCollection { get; private set; }
  12. // these are data that are now stored in the subshaders.
  13. // but for backwards compatibility with the existing Targets,
  14. // we store the values provided directly by the Target,
  15. // and apply them to all of the subShaders provided by the Target (that don't have their own setting)
  16. // the Targets are free to switch to specifying these values per SubShaderDescriptor instead,
  17. // if they want to specify different values for each subshader.
  18. private List<ShaderCustomEditor> customEditorForRenderPipelines;
  19. private string defaultShaderGUI;
  20. // assetCollection is used to gather asset dependencies
  21. public TargetSetupContext(AssetCollection assetCollection = null)
  22. {
  23. subShaders = new List<SubShaderDescriptor>();
  24. kernels = new KernelCollection();
  25. this.assetCollection = assetCollection;
  26. }
  27. public void SetupFinalize()
  28. {
  29. // copy custom editors to each subshader, if they don't have their own specification
  30. if (subShaders == null)
  31. return;
  32. for (int i = 0; i < subShaders.Count; i++)
  33. {
  34. var subShader = subShaders[i];
  35. if ((subShader.shaderCustomEditors == null) && (customEditorForRenderPipelines != null))
  36. subShader.shaderCustomEditors = new List<ShaderCustomEditor>(customEditorForRenderPipelines);
  37. if (subShader.shaderCustomEditor == null)
  38. subShader.shaderCustomEditor = defaultShaderGUI;
  39. subShaders[i] = subShader; // yay C# structs
  40. }
  41. }
  42. public void AddSubShader(SubShaderDescriptor subShader)
  43. {
  44. subShaders.Add(subShader);
  45. }
  46. public void AddKernel(KernelDescriptor kernel)
  47. {
  48. kernels.Add(kernel);
  49. }
  50. public void AddAssetDependency(GUID guid, AssetCollection.Flags flags)
  51. {
  52. assetCollection?.AddAssetDependency(guid, flags);
  53. }
  54. public void SetDefaultShaderGUI(string defaultShaderGUI)
  55. {
  56. this.defaultShaderGUI = defaultShaderGUI;
  57. }
  58. public void AddCustomEditorForRenderPipeline(string shaderGUI, Type renderPipelineAssetType)
  59. => AddCustomEditorForRenderPipeline(shaderGUI, renderPipelineAssetType.FullName);
  60. public void AddCustomEditorForRenderPipeline(string shaderGUI, string renderPipelineAssetTypeFullName)
  61. {
  62. if (customEditorForRenderPipelines == null)
  63. customEditorForRenderPipelines = new List<ShaderCustomEditor>();
  64. customEditorForRenderPipelines.Add(
  65. new ShaderCustomEditor()
  66. {
  67. shaderGUI = shaderGUI,
  68. renderPipelineAssetType = renderPipelineAssetTypeFullName
  69. });
  70. }
  71. public bool HasCustomEditorForRenderPipeline<RPT>()
  72. => HasCustomEditorForRenderPipeline(typeof(RPT).FullName);
  73. public bool HasCustomEditorForRenderPipeline(Type renderPipelineAssetType)
  74. => HasCustomEditorForRenderPipeline(renderPipelineAssetType.FullName);
  75. public bool HasCustomEditorForRenderPipeline(string renderPipelineAssetTypeFullName)
  76. => customEditorForRenderPipelines?.Any(c => c.renderPipelineAssetType == renderPipelineAssetTypeFullName) ?? false;
  77. }
  78. }