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.
 
 
 

106 lines
3.0 KiB

// Amplify Shader Editor - Visual Shader Editing Tool
// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
using System;
using UnityEngine;
using UnityEditor;
namespace AmplifyShaderEditor
{
[Serializable]
public sealed class TemplateShaderModelModule : TemplateModuleParent
{
private const string ShaderModelStr = "Shader Model";
private const string ShaderModelFormatStr = "#pragma target ";
private const string ShaderModelEncapsulateFormatStr = "CGINCLUDE\n#pragma target {0}\nENDCG";
[SerializeField]
private int m_shaderModelIdx = 2;
[SerializeField]
private bool m_encapsulateOnCGInlude = false;
public TemplateShaderModelModule() : base("Shader Model"){ }
public override void Draw( UndoParentNode owner, bool style = true )
{
EditorGUI.BeginChangeCheck();
m_shaderModelIdx = owner.EditorGUILayoutPopup( ShaderModelStr, m_shaderModelIdx, TemplateHelperFunctions.AvailableShaderModels );
if( EditorGUI.EndChangeCheck() )
{
m_isDirty = true;
}
}
public void CopyFrom( TemplateShaderModelModule other , bool allData )
{
if( allData )
{
m_independentModule = other.IndependentModule;
m_encapsulateOnCGInlude = other.EncapsulateOnCGInlude;
}
m_shaderModelIdx = other.CurrentShaderModel;
}
public override void ReadFromString( ref uint index, ref string[] nodeParams )
{
bool validDataOnMeta = m_validData;
if( UIUtils.CurrentShaderVersion() > TemplatesManager.MPShaderVersion )
{
validDataOnMeta = Convert.ToBoolean( nodeParams[ index++ ] );
}
if( validDataOnMeta )
m_shaderModelIdx = Convert.ToInt32( nodeParams[ index++ ] );
}
public override void WriteToString( ref string nodeInfo )
{
IOUtils.AddFieldValueToString( ref nodeInfo, m_validData );
if( m_validData )
IOUtils.AddFieldValueToString( ref nodeInfo, m_shaderModelIdx );
}
public override string GenerateShaderData( bool isSubShader )
{
if( m_encapsulateOnCGInlude )
{
return string.Format( ShaderModelEncapsulateFormatStr, TemplateHelperFunctions.AvailableShaderModels[ m_shaderModelIdx ] );
}
else
{
return ShaderModelFormatStr + TemplateHelperFunctions.AvailableShaderModels[ m_shaderModelIdx ];
}
}
public void ConfigureFromTemplateData( TemplateShaderModelData data )
{
bool newValidData = ( data.DataCheck == TemplateDataCheck.Valid );
if( newValidData && m_validData != newValidData )
{
m_independentModule = data.IndependentModule;
if( TemplateHelperFunctions.ShaderModelToArrayIdx.ContainsKey( data.Value ) )
{
m_shaderModelIdx = TemplateHelperFunctions.ShaderModelToArrayIdx[ data.Value ];
}
m_encapsulateOnCGInlude = data.Encapsulate;
}
m_validData = newValidData;
}
public int CurrentShaderModel { get { return m_shaderModelIdx; } }
public bool EncapsulateOnCGInlude { get { return m_encapsulateOnCGInlude; } }
public int InterpolatorAmount
{
get
{
return TemplateHelperFunctions.AvailableInterpolators[ TemplateHelperFunctions.AvailableShaderModels[ m_shaderModelIdx ] ];
}
}
}
}