// Amplify Shader Editor - Visual Shader Editing Tool // Copyright (c) Amplify Creations, Lda using System; using UnityEditor; using UnityEngine; namespace AmplifyShaderEditor { [Serializable] public class RenderingPlatformOpHelper { private const string RenderingPlatformsStr = " Rendering Platforms"; private readonly string[] RenderingPlatformsLabels = { " Direct3D 9", " Direct3D 11/12", " OpenGL 3.x/4.x", " OpenGL ES 2.0", " OpenGL ES 3.x", " iOS/Mac Metal", " Direct3D 11 9.x", " Xbox 360", " Xbox One", " PlayStation 4", " PlayStation Vita", " Nintendo 3DS", " Nintendo Wii U" }; [SerializeField] private bool[] m_renderingPlatformValues; public RenderingPlatformOpHelper() { m_renderingPlatformValues = new bool[ RenderingPlatformsLabels.Length ]; for ( int i = 0; i < m_renderingPlatformValues.Length; i++ ) { m_renderingPlatformValues[ i ] = true; } } public void Draw( ParentNode owner ) { bool value = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedRenderingPlatforms; NodeUtils.DrawPropertyGroup( ref value, RenderingPlatformsStr, () => { for ( int i = 0; i < m_renderingPlatformValues.Length; i++ ) { m_renderingPlatformValues[ i ] = owner.EditorGUILayoutToggleLeft( RenderingPlatformsLabels[ i ], m_renderingPlatformValues[ i ] ); } } ); owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedRenderingPlatforms = value; } public void SetRenderingPlatforms( ref string ShaderBody ) { int checkedPlatforms = 0; int uncheckedPlatforms = 0; for ( int i = 0; i < m_renderingPlatformValues.Length; i++ ) { if ( m_renderingPlatformValues[ i ] ) { checkedPlatforms += 1; } else { uncheckedPlatforms += 1; } } if ( checkedPlatforms > 0 && checkedPlatforms < m_renderingPlatformValues.Length ) { string result = string.Empty; if ( checkedPlatforms < uncheckedPlatforms ) { result = "only_renderers "; for ( int i = 0; i < m_renderingPlatformValues.Length; i++ ) { if ( m_renderingPlatformValues[ i ] ) { result += ( RenderPlatforms ) i + " "; } } } else { result = "exclude_renderers "; for ( int i = 0; i < m_renderingPlatformValues.Length; i++ ) { if ( !m_renderingPlatformValues[ i ] ) { result += ( RenderPlatforms ) i + " "; } } } MasterNode.AddShaderPragma( ref ShaderBody, result ); } } public void ReadFromString( ref uint index, ref string[] nodeParams ) { for ( int i = 0; i < m_renderingPlatformValues.Length; i++ ) { m_renderingPlatformValues[ i ] = Convert.ToBoolean( nodeParams[ index++ ] ); } } public void WriteToString( ref string nodeInfo ) { for ( int i = 0; i < m_renderingPlatformValues.Length; i++ ) { IOUtils.AddFieldValueToString( ref nodeInfo, m_renderingPlatformValues[ i ] ); } } } }