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

// Amplify Shader Editor - Visual Shader Editing Tool
// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
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 ] );
}
}
}
}