TemplateShaderModelModule.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. // Amplify Shader Editor - Visual Shader Editing Tool
  2. // Copyright (c) Amplify Creations, Lda <info@amplify.pt>
  3. using System;
  4. using UnityEngine;
  5. using UnityEditor;
  6. namespace AmplifyShaderEditor
  7. {
  8. [Serializable]
  9. public sealed class TemplateShaderModelModule : TemplateModuleParent
  10. {
  11. private const string ShaderModelStr = "Shader Model";
  12. private const string ShaderModelFormatStr = "#pragma target ";
  13. private const string ShaderModelEncapsulateFormatStr = "CGINCLUDE\n#pragma target {0}\nENDCG";
  14. [SerializeField]
  15. private int m_shaderModelIdx = 2;
  16. [SerializeField]
  17. private bool m_encapsulateOnCGInlude = false;
  18. public TemplateShaderModelModule() : base("Shader Model"){ }
  19. public override void Draw( UndoParentNode owner, bool style = true )
  20. {
  21. EditorGUI.BeginChangeCheck();
  22. m_shaderModelIdx = owner.EditorGUILayoutPopup( ShaderModelStr, m_shaderModelIdx, TemplateHelperFunctions.AvailableShaderModels );
  23. if( EditorGUI.EndChangeCheck() )
  24. {
  25. m_isDirty = true;
  26. }
  27. }
  28. public void CopyFrom( TemplateShaderModelModule other , bool allData )
  29. {
  30. if( allData )
  31. {
  32. m_independentModule = other.IndependentModule;
  33. m_encapsulateOnCGInlude = other.EncapsulateOnCGInlude;
  34. }
  35. m_shaderModelIdx = other.CurrentShaderModelIdx;
  36. }
  37. public void ReadFromString( TemplateModulesData modulesData , ref uint index, ref string[] nodeParams )
  38. {
  39. bool validDataOnMeta = m_validData;
  40. if( UIUtils.CurrentShaderVersion() > TemplatesManager.MPShaderVersion )
  41. {
  42. validDataOnMeta = Convert.ToBoolean( nodeParams[ index++ ] );
  43. }
  44. if( validDataOnMeta )
  45. {
  46. m_shaderModelIdx = Convert.ToInt32( nodeParams[ index++ ] );
  47. int templateModule = TemplateHelperFunctions.ShaderModelToArrayIdx[ modulesData.ShaderModel.Value ];
  48. if( templateModule > m_shaderModelIdx )
  49. {
  50. if( Preferences.User.ForceTemplateMinShaderModel )
  51. {
  52. m_shaderModelIdx = templateModule;
  53. UIUtils.ShowMessage("Changing shader model to minimum set by template: " + modulesData.ShaderModel.Value+"\n"+
  54. "To disable this behavior please toggle off\n" +
  55. "Preferences > Amplify Shader Editor > Force Template Min. Shader Model" , MessageSeverity.Warning );
  56. }
  57. }
  58. }
  59. }
  60. public override void WriteToString( ref string nodeInfo )
  61. {
  62. IOUtils.AddFieldValueToString( ref nodeInfo, m_validData );
  63. if( m_validData )
  64. IOUtils.AddFieldValueToString( ref nodeInfo, m_shaderModelIdx );
  65. }
  66. public override string GenerateShaderData( bool isSubShader )
  67. {
  68. if( m_encapsulateOnCGInlude )
  69. {
  70. return string.Format( ShaderModelEncapsulateFormatStr, TemplateHelperFunctions.AvailableShaderModels[ m_shaderModelIdx ] );
  71. }
  72. else
  73. {
  74. return ShaderModelFormatStr + TemplateHelperFunctions.AvailableShaderModels[ m_shaderModelIdx ];
  75. }
  76. }
  77. public void ConfigureFromTemplateData( TemplateShaderModelData data )
  78. {
  79. bool newValidData = ( data.DataCheck == TemplateDataCheck.Valid );
  80. if( newValidData && m_validData != newValidData )
  81. {
  82. m_independentModule = data.IndependentModule;
  83. if( TemplateHelperFunctions.ShaderModelToArrayIdx.ContainsKey( data.Value ) )
  84. {
  85. m_shaderModelIdx = TemplateHelperFunctions.ShaderModelToArrayIdx[ data.Value ];
  86. }
  87. m_encapsulateOnCGInlude = data.Encapsulate;
  88. }
  89. m_validData = newValidData;
  90. }
  91. public int CurrentShaderModelIdx { get { return m_shaderModelIdx; } }
  92. public string CurrentShaderModel { get { return TemplateHelperFunctions.AvailableShaderModels[ m_shaderModelIdx ]; } }
  93. public bool EncapsulateOnCGInlude { get { return m_encapsulateOnCGInlude; } }
  94. public int InterpolatorAmount
  95. {
  96. get
  97. {
  98. return TemplateHelperFunctions.AvailableInterpolators[ TemplateHelperFunctions.AvailableShaderModels[ m_shaderModelIdx ] ];
  99. }
  100. }
  101. }
  102. }