You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

117 lines
3.1 KiB

  1. // Amplify Shader Editor - Visual Shader Editing Tool
  2. // Copyright (c) Amplify Creations, Lda <info@amplify.pt>
  3. using System;
  4. using UnityEditor;
  5. using UnityEngine;
  6. namespace AmplifyShaderEditor
  7. {
  8. [Serializable]
  9. public class RenderingPlatformOpHelper
  10. {
  11. private const string RenderingPlatformsStr = " Rendering Platforms";
  12. private readonly string[] RenderingPlatformsLabels = { " Direct3D 9",
  13. " Direct3D 11/12",
  14. " OpenGL 3.x/4.x",
  15. " OpenGL ES 2.0",
  16. " OpenGL ES 3.x",
  17. " iOS/Mac Metal",
  18. " Direct3D 11 9.x",
  19. " Xbox 360",
  20. " Xbox One",
  21. " PlayStation 4",
  22. " PlayStation Vita",
  23. " Nintendo 3DS",
  24. " Nintendo Wii U" };
  25. [SerializeField]
  26. private bool[] m_renderingPlatformValues;
  27. public RenderingPlatformOpHelper()
  28. {
  29. m_renderingPlatformValues = new bool[ RenderingPlatformsLabels.Length ];
  30. for ( int i = 0; i < m_renderingPlatformValues.Length; i++ )
  31. {
  32. m_renderingPlatformValues[ i ] = true;
  33. }
  34. }
  35. public void Draw( ParentNode owner )
  36. {
  37. bool value = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedRenderingPlatforms;
  38. NodeUtils.DrawPropertyGroup( ref value, RenderingPlatformsStr, () =>
  39. {
  40. for ( int i = 0; i < m_renderingPlatformValues.Length; i++ )
  41. {
  42. m_renderingPlatformValues[ i ] = owner.EditorGUILayoutToggleLeft( RenderingPlatformsLabels[ i ], m_renderingPlatformValues[ i ] );
  43. }
  44. } );
  45. owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedRenderingPlatforms = value;
  46. }
  47. public void SetRenderingPlatforms( ref string ShaderBody )
  48. {
  49. int checkedPlatforms = 0;
  50. int uncheckedPlatforms = 0;
  51. for ( int i = 0; i < m_renderingPlatformValues.Length; i++ )
  52. {
  53. if ( m_renderingPlatformValues[ i ] )
  54. {
  55. checkedPlatforms += 1;
  56. }
  57. else
  58. {
  59. uncheckedPlatforms += 1;
  60. }
  61. }
  62. if ( checkedPlatforms > 0 && checkedPlatforms < m_renderingPlatformValues.Length )
  63. {
  64. string result = string.Empty;
  65. if ( checkedPlatforms < uncheckedPlatforms )
  66. {
  67. result = "only_renderers ";
  68. for ( int i = 0; i < m_renderingPlatformValues.Length; i++ )
  69. {
  70. if ( m_renderingPlatformValues[ i ] )
  71. {
  72. result += ( RenderPlatforms ) i + " ";
  73. }
  74. }
  75. }
  76. else
  77. {
  78. result = "exclude_renderers ";
  79. for ( int i = 0; i < m_renderingPlatformValues.Length; i++ )
  80. {
  81. if ( !m_renderingPlatformValues[ i ] )
  82. {
  83. result += ( RenderPlatforms ) i + " ";
  84. }
  85. }
  86. }
  87. MasterNode.AddShaderPragma( ref ShaderBody, result );
  88. }
  89. }
  90. public void ReadFromString( ref uint index, ref string[] nodeParams )
  91. {
  92. for ( int i = 0; i < m_renderingPlatformValues.Length; i++ )
  93. {
  94. m_renderingPlatformValues[ i ] = Convert.ToBoolean( nodeParams[ index++ ] );
  95. }
  96. }
  97. public void WriteToString( ref string nodeInfo )
  98. {
  99. for ( int i = 0; i < m_renderingPlatformValues.Length; i++ )
  100. {
  101. IOUtils.AddFieldValueToString( ref nodeInfo, m_renderingPlatformValues[ i ] );
  102. }
  103. }
  104. }
  105. }