/// <summary> /// Any properties marked as inherited will have their blending mode changed to the default type. This can occur when a root element is set to inherited. /// </summary> public void ApplyDefaultToInherited() { if (Source == BlendingType.Inherit) { Source = BlendingType.SrcAlpha; } if (Destination == BlendingType.Inherit) { Destination = BlendingType.OneMinusSrcAlpha; } if (SourceAlpha == BlendingType.Inherit) { SourceAlpha = BlendingType.One; } if (DestinationAlpha == BlendingType.Inherit) { DestinationAlpha = BlendingType.One; } if (RGBEquation == BlendingEquation.Inherit) { RGBEquation = BlendingEquation.Add; } if (AlphaEquation == BlendingEquation.Inherit) { AlphaEquation = BlendingEquation.Add; } }
/// <summary> /// Copy all properties that are marked as inherited from a parent <see cref="BlendingParameters"/> object. /// </summary> /// <param name="parent">The parent <see cref="BlendingParameters"/> from which to copy inherited properties.</param> public void CopyFromParent(BlendingParameters parent) { if (Source == BlendingType.Inherit) { Source = parent.Source; } if (Destination == BlendingType.Inherit) { Destination = parent.Destination; } if (SourceAlpha == BlendingType.Inherit) { SourceAlpha = parent.SourceAlpha; } if (DestinationAlpha == BlendingType.Inherit) { DestinationAlpha = parent.DestinationAlpha; } if (RGBEquation == BlendingEquation.Inherit) { RGBEquation = parent.RGBEquation; } if (AlphaEquation == BlendingEquation.Inherit) { AlphaEquation = parent.AlphaEquation; } }
void Mode_Changed(object sender, SelectionChangedEventArgs e) { BlendingType selected = (BlendingType)BlendingMode.SelectedIndex; if (_layer.BlendingMode != selected) { Program.Project.Undo.AddAndExecute(new Layer.ModeUndoEntry( _layer, _layer.BlendingMode, selected )); } }
private static BlendingFactorDest translateBlendingFactorDest(BlendingType factor) { switch (factor) { case BlendingType.ConstantAlpha: return(BlendingFactorDest.ConstantAlpha); case BlendingType.ConstantColor: return(BlendingFactorDest.ConstantColor); case BlendingType.DstAlpha: return(BlendingFactorDest.DstAlpha); case BlendingType.DstColor: return(BlendingFactorDest.DstColor); case BlendingType.One: return(BlendingFactorDest.One); case BlendingType.OneMinusConstantAlpha: return(BlendingFactorDest.OneMinusConstantAlpha); case BlendingType.OneMinusConstantColor: return(BlendingFactorDest.OneMinusConstantColor); case BlendingType.OneMinusDstAlpha: return(BlendingFactorDest.OneMinusDstAlpha); case BlendingType.OneMinusDstColor: return(BlendingFactorDest.OneMinusDstColor); case BlendingType.OneMinusSrcAlpha: return(BlendingFactorDest.OneMinusSrcAlpha); case BlendingType.OneMinusSrcColor: return(BlendingFactorDest.OneMinusSrcColor); case BlendingType.SrcAlpha: return(BlendingFactorDest.SrcAlpha); case BlendingType.SrcAlphaSaturate: return(BlendingFactorDest.SrcAlphaSaturate); case BlendingType.SrcColor: return(BlendingFactorDest.SrcColor); default: case BlendingType.Zero: return(BlendingFactorDest.Zero); } }
private DirectXPipeline <BlendingConstantBuffer> LoadPipline(BlendingType blendingType, DirectXContext dx) { var desc = s_descriptors[blendingType]; return(new DirectXPipeline <BlendingConstantBuffer>(new DirectXPipelineConfig { Blend = true, PixelShaderFile = desc.ShaderFile, PixelShaderFunction = desc.PixelShaderFunction, VertexShaderFile = desc.ShaderFile, VertexShaderFunction = desc.VetextShaderFunction, }, dx)); }
void Mode_Changed(object sender, SelectionChangedEventArgs e) { BlendingType selected = (BlendingType)BlendingMode.SelectedIndex; if (_layer.BlendingMode != selected) { BlendingType u = _layer.BlendingMode; BlendingType r = selected; List <int> path = Track.GetPath(_layer); Program.Project.Undo.Add($"Layer Blending Changed to {r}", () => { Track.TraversePath <Layer>(path).BlendingMode = u; }, () => { Track.TraversePath <Layer>(path).BlendingMode = r; }); _layer.BlendingMode = selected; } }
public void SetMode(BlendingType mode) => Range.Enabled = (BlendingMode.SelectedIndex = (int)mode) > 0;
//property.Expanded = EditorGUILayout.Foldout( property.Expanded, property.GetPropertyType().PropertyTypeString() ); public void Draw() { var shaderNameContent = new GUIContent( "Shader Name", "Name for shader. Includes the hierarchy listing, that is, MyShaders/Shader will be in a folder called \"MyShaders\" in the shader selection dropdown. Also used when referring to fallback shaders."); var oldColor = GUI.color; if( string.IsNullOrEmpty(_shaderName ) ) { GUI.color = Color.red; } _shaderName.Value = EditorGUILayout.TextField(shaderNameContent, _shaderName.Value); GUI.color = oldColor; var shaderFallbackContent = new GUIContent( "Shader Fallback", "Fallback shader to use in case this shader can not be used."); _shaderFallback.Value = EditorGUILayout.TextField( shaderFallbackContent, _shaderFallback.Value ); var targetContent = new GUIContent("Shader Model","Requires more recent hardware to use the shader, but allows for more instructions, texture reads, and more input information."); _shaderTarget = (ShaderTarget)EditorGUILayout.EnumPopup( targetContent, _shaderTarget ); var excludePathContent = new GUIContent("Exclude Path","Exclude a renderpath from shader generation"); _excludePath = (ExcludePath)EditorGUILayout.EnumPopup( excludePathContent, _excludePath ); GUILayout.Space(8); _showQueueSettings = EditorGUILayout.Foldout( _showQueueSettings, "Queue Settings" ); if( _showQueueSettings ) { var renderTypeContent = new GUIContent("Render Type","This is the rendertype tag inserted into the shader. Can be used for shader replace"); _renderType = (RenderType)EditorGUILayout.EnumPopup( renderTypeContent, _renderType ); if ( _renderType == RenderType.Custom ) _renderTypeCustom.Value = EditorGUILayout.TextField( "Custom Type" ,_renderTypeCustom.Value ); var queueContent = new GUIContent("Render Queue","The render queue that this material will be put in"); _queue = (Queue)EditorGUILayout.EnumPopup( queueContent, _queue ); var offContent = new GUIContent( "Queue Offset", "Offset for drawing. Used to ensure some things draw before or after others, it specifically is an offset from the given queue- That is to say, you won't have a transparent object draw before an opaque object (or similar) due to this offset."); _queueAdjust = EditorGUILayout.IntSlider(offContent, _queueAdjust.Value, -100, 100); } GUILayout.Space( 8 ); _showCullingAndDepthSettings = EditorGUILayout.Foldout( _showCullingAndDepthSettings, "Culling and Depth Settings" ); if( _showCullingAndDepthSettings ) { var zWriteContent = new GUIContent("Write Depth","Depth is considered when testing other objects. Disable for certain effects, like letting other things draw over yourself, or for speed on most overlays."); _zWrite = (ZWrite)EditorGUILayout.EnumPopup( zWriteContent, _zWrite ); var cullModeContent = new GUIContent("CullMode","Select back / forward to clip backwards facing polygons"); _cullMode = (CullMode)EditorGUILayout.EnumPopup( cullModeContent, _cullMode ); var zTestContent = new GUIContent("ZTest","Select Z-Test Value"); _zTest = (ZTest)EditorGUILayout.EnumPopup( zTestContent, _zTest ); var enableLODContent = new GUIContent("Enable LOD","Enable Shader LOD scaling"); _enableLOD = EditorGUILayout.BeginToggleGroup( enableLODContent, _enableLOD ); _lod = EditorGUILayout.IntSlider( "LOD", _lod, 0, 1000 ); EditorGUILayout.EndToggleGroup(); } GUILayout.Space( 8 ); _showBlending = EditorGUILayout.Foldout( _showBlending, "Blending Settings" ); if( _showBlending ) { var blendingTypeContent = new GUIContent("Blend Type","Use a build in blend mode or a custom blend mode"); _blending = (BlendingType)EditorGUILayout.EnumPopup( blendingTypeContent, _blending ); if( CustomBlendingEnabled() ) { var srcBlendContent = new GUIContent("Src Blend Mode","How the source channel of blending is used"); _srcBlend = (BlendingMode)EditorGUILayout.EnumPopup( srcBlendContent, _srcBlend ); var dstBlendContent = new GUIContent("Dst Blend Mode","How the destination channel of blending is used"); _dstBlend = (BlendingMode)EditorGUILayout.EnumPopup( dstBlendContent, _dstBlend ); } } GUILayout.Space( 8 ); _showColorAndLighting = EditorGUILayout.Foldout( _showColorAndLighting, "Color And Lighting Settings" ); if( _showColorAndLighting ) { GUILayout.BeginHorizontal(); GUILayout.Label( "Color Mask:", GUILayout.ExpandWidth(false) ); _colorMaskR.Value = EditorExtensions.ToggleButton( _colorMaskR.Value, "R","Mask R Channel"); _colorMaskG.Value = EditorExtensions.ToggleButton( _colorMaskG.Value, "G","Mask G Channel"); _colorMaskB.Value = EditorExtensions.ToggleButton( _colorMaskB.Value, "B","Mask B Channel"); _colorMaskA.Value = EditorExtensions.ToggleButton( _colorMaskA.Value, "A","Mask A Channel"); GUILayout.EndHorizontal(); _dualForward = GUILayout.Toggle( _dualForward, new GUIContent( "Forward Dual Lightmaps","Use dual lightmaps in the forward rendering path" )); _fullForwardShadows = GUILayout.Toggle( _fullForwardShadows, new GUIContent( "Forward Full Shadows", "Support all shadow types in Forward rendering path." )); _softVegetation = GUILayout.Toggle( _softVegetation, new GUIContent( "Soft Vegetation", "Makes the surface shader only be rendered when Soft Vegetation is on." )); _noAmbient = GUILayout.Toggle( _noAmbient, new GUIContent( "No Ambient", "Do not apply any ambient lighting or spherical harmonics lights.")); _noLightmap = GUILayout.Toggle( _noLightmap, new GUIContent( "No Lightmaps", "Disables lightmap support in this shader (makes a shader smaller)." )); _addShadow = GUILayout.Toggle( _addShadow, new GUIContent( "Advanced Shadow Pass", "Performs vertex transformations and clipping for the shadow pass, you need to use this if shadows do not display properly." )); _ignoreProjectors = GUILayout.Toggle( _ignoreProjectors, new GUIContent( "Ignore Projectors", "Ignores projector components, should be used if your doing custom vertex transformations or most transparency" )); _approxview = GUILayout.Toggle( _approxview, new GUIContent( "Approximate View", "Computes normalized view direction per-vertex instead of per-pixel, for shaders that need it. This is faster, but view direction is not entirely correct when camera gets close to surface." )); _halfasview = GUILayout.Toggle( _halfasview, new GUIContent( "Half As View", "Pass half-direction vector into the lighting function instead of view-direction. Half-direction will be computed and normalized per vertex. This is faster, but not entirely correct." )); _noForwardAdd = GUILayout.Toggle( _noForwardAdd, new GUIContent( "Disable Forward Add", "Disables Forward rendering additive pass. This makes the shader support one full directional light, with all other lights computed per-vertex/SH. Makes shaders smaller as well." )); } GUILayout.Space( 8 ); _showFogSettings = EditorGUILayout.Foldout( _showFogSettings, "Fog Settings" ); if( _showFogSettings ) { _fogModeOverride = EditorGUILayout.BeginToggleGroup( "Fog Mode Override", _fogModeOverride ); var fogModeContent = new GUIContent("Fog Mode","The type of fog to use"); _fogMode = (FogMode)EditorGUILayout.EnumPopup( fogModeContent, _fogMode ); if( _fogMode == FogMode.Linear ) { _fogNearLinear.Value = EditorGUILayout.FloatField( "Near Linear Range:", _fogNearLinear ); _fogFarLinear.Value = EditorGUILayout.FloatField( "Far Linear Range:", _fogFarLinear ); } EditorGUILayout.EndToggleGroup(); _fogColorOverride = EditorGUILayout.BeginToggleGroup( "Fog Color Override", _fogColorOverride ); _fogColor.Value = EditorGUILayout.ColorField("Fog Color:", _fogColor ); EditorGUILayout.EndToggleGroup(); _fogDensityOverride = EditorGUILayout.BeginToggleGroup( "Fog Density Override", _fogDensityOverride ); _fogDensity.Value = EditorGUILayout.FloatField( "Fog Density:", _fogDensity ); EditorGUILayout.EndToggleGroup(); } }
static dynamic Decode(BinaryReader reader, int version, Type ensure = null, bool root = false) { Type t = DecodeID(reader); if (ensure != null && ensure != t) { throw new InvalidDataException(); } if (t == typeof(Preferences) && root) { Preferences.AlwaysOnTop = reader.ReadBoolean(); Preferences.CenterTrackContents = reader.ReadBoolean(); if (version >= 9) { Preferences.LaunchpadStyle = (LaunchpadStyles)reader.ReadInt32(); } if (version >= 14) { Preferences.LaunchpadGridRotation = reader.ReadInt32() > 0; } Preferences.AutoCreateKeyFilter = reader.ReadBoolean(); Preferences.AutoCreatePageFilter = reader.ReadBoolean(); if (version >= 11) { Preferences.AutoCreatePattern = reader.ReadBoolean(); } Preferences.FadeSmoothness = reader.ReadDouble(); Preferences.CopyPreviousFrame = reader.ReadBoolean(); if (version >= 7) { Preferences.CaptureLaunchpad = reader.ReadBoolean(); } Preferences.EnableGestures = reader.ReadBoolean(); if (version >= 7) { Preferences.PaletteName = reader.ReadString(); Preferences.CustomPalette = new Palette((from i in Enumerable.Range(0, 128) select(Color) Decode(reader, version)).ToArray()); Preferences.ImportPalette = (Palettes)reader.ReadInt32(); Preferences.Theme = (Themes)reader.ReadInt32(); } if (version >= 10) { Preferences.Backup = reader.ReadBoolean(); Preferences.Autosave = reader.ReadBoolean(); } if (version >= 12) { Preferences.UndoLimit = reader.ReadBoolean(); } if (version <= 0) { Preferences.DiscordPresence = true; reader.ReadBoolean(); } else { Preferences.DiscordPresence = reader.ReadBoolean(); } Preferences.DiscordFilename = reader.ReadBoolean(); ColorHistory.Set( (from i in Enumerable.Range(0, reader.ReadInt32()) select(Color) Decode(reader, version)).ToList() ); if (version >= 2) { MIDI.Devices = (from i in Enumerable.Range(0, reader.ReadInt32()) select(Launchpad) Decode(reader, version)).ToList(); } if (version >= 15) { Preferences.Recents = (from i in Enumerable.Range(0, reader.ReadInt32()) select reader.ReadString()).ToList(); Preferences.CrashName = reader.ReadString(); Preferences.CrashPath = reader.ReadString(); } if (version >= 16) { Preferences.CheckForUpdates = reader.ReadBoolean(); } if (version >= 17) { Preferences.BaseTime = reader.ReadInt64(); } return(null); } else if (t == typeof(Copyable)) { return(new Copyable() { Contents = (from i in Enumerable.Range(0, reader.ReadInt32()) select(ISelect) Decode(reader, version)).ToList() }); } else if (t == typeof(Project)) { int bpm = reader.ReadInt32(); int page = reader.ReadInt32(); List <Track> tracks = (from i in Enumerable.Range(0, reader.ReadInt32()) select(Track) Decode(reader, version)).ToList(); string author = ""; long time = 0; long started = 0; if (version >= 17) { author = reader.ReadString(); time = reader.ReadInt64(); started = reader.ReadInt64(); } return(new Project(bpm, page, tracks, author, time, started)); } else if (t == typeof(Track)) { Chain chain = (Chain)Decode(reader, version); Launchpad lp = (Launchpad)Decode(reader, version); string name = reader.ReadString(); bool enabled = true; if (version >= 8) { enabled = reader.ReadBoolean(); } return(new Track(chain, lp, name) { Enabled = enabled }); } else if (t == typeof(Chain)) { List <Device> devices = (from i in Enumerable.Range(0, reader.ReadInt32()) select(Device) Decode(reader, version)).ToList(); string name = reader.ReadString(); bool enabled = true; if (version >= 6) { enabled = reader.ReadBoolean(); } return(new Chain(devices, name) { Enabled = enabled }); } else if (t == typeof(Device)) { bool collapsed = false; if (version >= 5) { collapsed = reader.ReadBoolean(); } bool enabled = true; if (version >= 5) { enabled = reader.ReadBoolean(); } Device ret = (Device)Decode(reader, version); ret.Collapsed = collapsed; ret.Enabled = enabled; return(ret); } else if (t == typeof(Launchpad)) { string name = reader.ReadString(); if (name == "") { return(MIDI.NoOutput); } InputType format = InputType.DrumRack; if (version >= 2) { format = (InputType)reader.ReadInt32(); } RotationType rotation = RotationType.D0; if (version >= 9) { rotation = (RotationType)reader.ReadInt32(); } foreach (Launchpad lp in MIDI.Devices) { if (lp.Name == name) { if (lp.GetType() == typeof(Launchpad)) { lp.InputFormat = format; lp.Rotation = rotation; } return(lp); } } Launchpad ret; if (name.Contains("Virtual Launchpad ")) { ret = new VirtualLaunchpad(name); } else if (name.Contains("Ableton Connector ")) { ret = new AbletonLaunchpad(name); } else { ret = new Launchpad(name, format, rotation); } MIDI.Devices.Add(ret); return(ret); } else if (t == typeof(Group)) { return(new Group( (from i in Enumerable.Range(0, reader.ReadInt32()) select(Chain) Decode(reader, version)).ToList(), reader.ReadBoolean()? (int?)reader.ReadInt32() : null )); } else if (t == typeof(Choke)) { return(new Choke( reader.ReadInt32(), (Chain)Decode(reader, version) )); } else if (t == typeof(Clear)) { return(new Clear( (ClearType)reader.ReadInt32() )); } else if (t == typeof(ColorFilter)) { return(new ColorFilter( reader.ReadDouble(), reader.ReadDouble(), reader.ReadDouble(), reader.ReadDouble(), reader.ReadDouble(), reader.ReadDouble() )); } else if (t == typeof(Copy)) { Time time; if (version <= 2) { time = new Time( reader.ReadBoolean(), Decode(reader, version), reader.ReadInt32() ); } else { time = Decode(reader, version); } double gate; if (version <= 13) { gate = (double)reader.ReadDecimal(); } else { gate = reader.ReadDouble(); } return(new Copy( time, gate, (CopyType)reader.ReadInt32(), (GridType)reader.ReadInt32(), reader.ReadBoolean(), (from i in Enumerable.Range(0, reader.ReadInt32()) select(Offset) Decode(reader, version)).ToList() )); } else if (t == typeof(Delay)) { Time time; if (version <= 2) { time = new Time( reader.ReadBoolean(), Decode(reader, version), reader.ReadInt32() ); } else { time = Decode(reader, version); } double gate; if (version <= 13) { gate = (double)reader.ReadDecimal(); } else { gate = reader.ReadDouble(); } return(new Delay(time, gate)); } else if (t == typeof(Fade)) { Time time; if (version <= 2) { time = new Time( reader.ReadBoolean(), Decode(reader, version), reader.ReadInt32() ); } else { time = Decode(reader, version); } double gate; if (version <= 13) { gate = (double)reader.ReadDecimal(); } else { gate = reader.ReadDouble(); } FadePlaybackType playmode = (FadePlaybackType)reader.ReadInt32(); int count; List <Color> colors = (from i in Enumerable.Range(0, count = reader.ReadInt32()) select(Color) Decode(reader, version)).ToList(); List <double> positions = (from i in Enumerable.Range(0, count) select(version <= 13)? (double)reader.ReadDecimal() : reader.ReadDouble()).ToList(); return(new Fade(time, gate, playmode, colors, positions)); } else if (t == typeof(Flip)) { return(new Flip( (FlipType)reader.ReadInt32(), reader.ReadBoolean() )); } else if (t == typeof(Hold)) { Time time; if (version <= 2) { time = new Time( reader.ReadBoolean(), Decode(reader, version), reader.ReadInt32() ); } else { time = Decode(reader, version); } double gate; if (version <= 13) { gate = (double)reader.ReadDecimal(); } else { gate = reader.ReadDouble(); } return(new Hold( time, gate, reader.ReadBoolean(), reader.ReadBoolean() )); } else if (t == typeof(KeyFilter)) { bool[] filter; if (version <= 18) { List <bool> oldFilter = (from i in Enumerable.Range(0, 100) select reader.ReadBoolean()).ToList(); oldFilter.Insert(99, false); filter = oldFilter.ToArray(); } else { filter = (from i in Enumerable.Range(0, 101) select reader.ReadBoolean()).ToArray(); } return(new KeyFilter(filter)); } else if (t == typeof(Layer)) { int target = reader.ReadInt32(); BlendingType blending = BlendingType.Normal; if (version >= 5) { if (version == 5) { blending = (BlendingType)reader.ReadInt32(); if ((int)blending == 2) { blending = BlendingType.Mask; } } else { blending = (BlendingType)reader.ReadInt32(); } } int range = 200; if (version >= 21) { range = reader.ReadInt32(); } return(new Layer(target, blending, range)); } else if (t == typeof(Move)) { return(new Move( Decode(reader, version), (GridType)reader.ReadInt32(), reader.ReadBoolean() )); } else if (t == typeof(Multi)) { return(new Multi( Decode(reader, version), (from i in Enumerable.Range(0, reader.ReadInt32()) select(Chain) Decode(reader, version)).ToList(), reader.ReadBoolean()? (int?)reader.ReadInt32() : null, (MultiType)reader.ReadInt32() )); } else if (t == typeof(Output)) { return(new Output( reader.ReadInt32() )); } else if (t == typeof(PageFilter)) { return(new PageFilter( (from i in Enumerable.Range(0, 100) select reader.ReadBoolean()).ToArray() )); } else if (t == typeof(Paint)) { return(new Paint( Decode(reader, version) )); } else if (t == typeof(Pattern)) { int repeats = 1; if (version >= 11) { repeats = reader.ReadInt32(); } double gate; if (version <= 13) { gate = (double)reader.ReadDecimal(); } else { gate = reader.ReadDouble(); } List <Frame> frames = (from i in Enumerable.Range(0, reader.ReadInt32()) select(Frame) Decode(reader, version)).ToList(); PlaybackType mode = (PlaybackType)reader.ReadInt32(); bool chokeenabled = false; int choke = 8; if (version <= 10) { chokeenabled = reader.ReadBoolean(); if (version <= 0) { if (chokeenabled) { choke = reader.ReadInt32(); } } else { choke = reader.ReadInt32(); } } bool infinite = false; if (version >= 4) { infinite = reader.ReadBoolean(); } int?rootkey = null; if (version >= 12) { rootkey = reader.ReadBoolean()? (int?)reader.ReadInt32() : null; } bool wrap = false; if (version >= 13) { wrap = reader.ReadBoolean(); } int expanded = reader.ReadInt32(); Pattern ret = new Pattern(repeats, gate, frames, mode, infinite, rootkey, wrap, expanded); if (chokeenabled) { return(new Choke(choke, new Chain(new List <Device>() { ret }))); } return(ret); } else if (t == typeof(Preview)) { return(new Preview()); } else if (t == typeof(Rotate)) { return(new Rotate( (RotateType)reader.ReadInt32(), reader.ReadBoolean() )); } else if (t == typeof(Switch)) { int page = reader.ReadInt32(); if (18 <= version && version <= 21 && reader.ReadBoolean()) { return(new Group(new List <Chain>() { new Chain(new List <Device>() { new Switch(page), new Clear(ClearType.Multi) }, "Switch Reset") })); } return(new Switch(page)); } else if (t == typeof(Tone)) { return(new Tone( reader.ReadDouble(), reader.ReadDouble(), reader.ReadDouble(), reader.ReadDouble(), reader.ReadDouble() )); } else if (t == typeof(Color)) { return(new Color( reader.ReadByte(), reader.ReadByte(), reader.ReadByte() )); } else if (t == typeof(Frame)) { Time time; if (version <= 2) { time = new Time( reader.ReadBoolean(), Decode(reader, version), reader.ReadInt32() ); } else { time = Decode(reader, version); } Color[] screen; if (version <= 19) { List <Color> oldScreen = (from i in Enumerable.Range(0, 100) select(Color) Decode(reader, version)).ToList(); oldScreen.Insert(99, new Color(0)); screen = oldScreen.ToArray(); } else { screen = (from i in Enumerable.Range(0, 101) select(Color) Decode(reader, version)).ToArray(); } return(new Frame(time, screen)); } else if (t == typeof(Length)) { return(new Length( reader.ReadInt32() )); } else if (t == typeof(Offset)) { return(new Offset( reader.ReadInt32(), reader.ReadInt32() )); } else if (t == typeof(Time)) { return(new Time( reader.ReadBoolean(), Decode(reader, version), reader.ReadInt32() )); } throw new InvalidDataException(); }
public static bool SupportsRange(this BlendingType type) => type != BlendingType.Normal;
public void SetMode(BlendingType mode) { BlendingMode.SelectedIndex = (int)mode; Range.Enabled = mode.SupportsRange(); }
//property.Expanded = EditorGUILayout.Foldout( property.Expanded, property.GetPropertyType().PropertyTypeString() ); public void Draw() { var shaderNameContent = new GUIContent( "Shader Name", "Name for shader. Includes the hierarchy listing, that is, MyShaders/Shader will be in a folder called \"MyShaders\" in the shader selection dropdown. Also used when referring to fallback shaders."); var oldColor = GUI.color; if (string.IsNullOrEmpty(_shaderName)) { GUI.color = Color.red; } _shaderName.Value = EditorGUILayout.TextField(shaderNameContent, _shaderName.Value); GUI.color = oldColor; var shaderFallbackContent = new GUIContent( "Shader Fallback", "Fallback shader to use in case this shader can not be used."); _shaderFallback.Value = EditorGUILayout.TextField(shaderFallbackContent, _shaderFallback.Value); var targetContent = new GUIContent("Shader Model", "Requires more recent hardware to use the shader, but allows for more instructions, texture reads, and more input information."); _shaderTarget = (ShaderTarget)EditorGUILayout.EnumPopup(targetContent, _shaderTarget); var excludePathContent = new GUIContent("Exclude Path", "Exclude a renderpath from shader generation"); _excludePath = (ExcludePath)EditorGUILayout.EnumPopup(excludePathContent, _excludePath); #if UNITY_5_3_OR_NEWER var shaderTypeContent = new GUIContent("Shader Type", "You can select Physically Based Rendering after Unity 5.3"); var currentshaderType = _shaderType; _shaderType = (ShaderType)EditorGUILayout.EnumPopup(shaderTypeContent, currentshaderType); if ((currentshaderType != _shaderType) && (OnChangeShaderType != null)) { OnChangeShaderType(); } #endif GUILayout.Space(8); _showQueueSettings = EditorGUILayout.Foldout(_showQueueSettings, "Queue Settings"); if (_showQueueSettings) { var renderTypeContent = new GUIContent("Render Type", "This is the rendertype tag inserted into the shader. Can be used for shader replace"); _renderType = (RenderType)EditorGUILayout.EnumPopup(renderTypeContent, _renderType); if (_renderType == RenderType.Custom) { _renderTypeCustom.Value = EditorGUILayout.TextField("Custom Type", _renderTypeCustom.Value); } var queueContent = new GUIContent("Render Queue", "The render queue that this material will be put in"); _queue = (Queue)EditorGUILayout.EnumPopup(queueContent, _queue); var offContent = new GUIContent( "Queue Offset", "Offset for drawing. Used to ensure some things draw before or after others, it specifically is an offset from the given queue- That is to say, you won't have a transparent object draw before an opaque object (or similar) due to this offset."); _queueAdjust = EditorGUILayout.IntSlider(offContent, _queueAdjust.Value, -100, 100); } GUILayout.Space(8); _showCullingAndDepthSettings = EditorGUILayout.Foldout(_showCullingAndDepthSettings, "Culling and Depth Settings"); if (_showCullingAndDepthSettings) { var zWriteContent = new GUIContent("Write Depth", "Depth is considered when testing other objects. Disable for certain effects, like letting other things draw over yourself, or for speed on most overlays."); _zWrite = (ZWrite)EditorGUILayout.EnumPopup(zWriteContent, _zWrite); var cullModeContent = new GUIContent("CullMode", "Select back / forward to clip backwards facing polygons"); _cullMode = (CullMode)EditorGUILayout.EnumPopup(cullModeContent, _cullMode); var zTestContent = new GUIContent("ZTest", "Select Z-Test Value"); _zTest = (ZTest)EditorGUILayout.EnumPopup(zTestContent, _zTest); var enableLODContent = new GUIContent("Enable LOD", "Enable Shader LOD scaling"); _enableLOD = EditorGUILayout.BeginToggleGroup(enableLODContent, _enableLOD); _lod = EditorGUILayout.IntSlider("LOD", _lod, 0, 1000); EditorGUILayout.EndToggleGroup(); } GUILayout.Space(8); _showBlending = EditorGUILayout.Foldout(_showBlending, "Blending Settings"); if (_showBlending) { var blendingTypeContent = new GUIContent("Blend Type", "Use a build in blend mode or a custom blend mode"); _blending = (BlendingType)EditorGUILayout.EnumPopup(blendingTypeContent, _blending); if (CustomBlendingEnabled()) { var srcBlendContent = new GUIContent("Src Blend Mode", "How the source channel of blending is used"); _srcBlend = (BlendingMode)EditorGUILayout.EnumPopup(srcBlendContent, _srcBlend); var dstBlendContent = new GUIContent("Dst Blend Mode", "How the destination channel of blending is used"); _dstBlend = (BlendingMode)EditorGUILayout.EnumPopup(dstBlendContent, _dstBlend); } } GUILayout.Space(8); _showColorAndLighting = EditorGUILayout.Foldout(_showColorAndLighting, "Color And Lighting Settings"); if (_showColorAndLighting) { GUILayout.BeginHorizontal(); GUILayout.Label("Color Mask:", GUILayout.ExpandWidth(false)); _colorMaskR.Value = EditorExtensions.ToggleButton(_colorMaskR.Value, "R", "Mask R Channel"); _colorMaskG.Value = EditorExtensions.ToggleButton(_colorMaskG.Value, "G", "Mask G Channel"); _colorMaskB.Value = EditorExtensions.ToggleButton(_colorMaskB.Value, "B", "Mask B Channel"); _colorMaskA.Value = EditorExtensions.ToggleButton(_colorMaskA.Value, "A", "Mask A Channel"); GUILayout.EndHorizontal(); _dualForward = GUILayout.Toggle(_dualForward, new GUIContent("Forward Dual Lightmaps", "Use dual lightmaps in the forward rendering path")); _fullForwardShadows = GUILayout.Toggle(_fullForwardShadows, new GUIContent("Forward Full Shadows", "Support all shadow types in Forward rendering path.")); _softVegetation = GUILayout.Toggle(_softVegetation, new GUIContent("Soft Vegetation", "Makes the surface shader only be rendered when Soft Vegetation is on.")); _noAmbient = GUILayout.Toggle(_noAmbient, new GUIContent("No Ambient", "Do not apply any ambient lighting or spherical harmonics lights.")); _noLightmap = GUILayout.Toggle(_noLightmap, new GUIContent("No Lightmaps", "Disables lightmap support in this shader (makes a shader smaller).")); _addShadow = GUILayout.Toggle(_addShadow, new GUIContent("Advanced Shadow Pass", "Performs vertex transformations and clipping for the shadow pass, you need to use this if shadows do not display properly.")); _ignoreProjectors = GUILayout.Toggle(_ignoreProjectors, new GUIContent("Ignore Projectors", "Ignores projector components, should be used if your doing custom vertex transformations or most transparency")); _approxview = GUILayout.Toggle(_approxview, new GUIContent("Approximate View", "Computes normalized view direction per-vertex instead of per-pixel, for shaders that need it. This is faster, but view direction is not entirely correct when camera gets close to surface.")); _halfasview = GUILayout.Toggle(_halfasview, new GUIContent("Half As View", "Pass half-direction vector into the lighting function instead of view-direction. Half-direction will be computed and normalized per vertex. This is faster, but not entirely correct.")); _noForwardAdd = GUILayout.Toggle(_noForwardAdd, new GUIContent("Disable Forward Add", "Disables Forward rendering additive pass. This makes the shader support one full directional light, with all other lights computed per-vertex/SH. Makes shaders smaller as well.")); } GUILayout.Space(8); _showFogSettings = EditorGUILayout.Foldout(_showFogSettings, "Fog Settings"); if (_showFogSettings) { _fogModeOverride = EditorGUILayout.BeginToggleGroup("Fog Mode Override", _fogModeOverride); var fogModeContent = new GUIContent("Fog Mode", "The type of fog to use"); _fogMode = (FogMode)EditorGUILayout.EnumPopup(fogModeContent, _fogMode); if (_fogMode == FogMode.Linear) { _fogNearLinear.Value = EditorGUILayout.FloatField("Near Linear Range:", _fogNearLinear); _fogFarLinear.Value = EditorGUILayout.FloatField("Far Linear Range:", _fogFarLinear); } EditorGUILayout.EndToggleGroup(); _fogColorOverride = EditorGUILayout.BeginToggleGroup("Fog Color Override", _fogColorOverride); _fogColor.Value = EditorGUILayout.ColorField("Fog Color:", _fogColor); EditorGUILayout.EndToggleGroup(); _fogDensityOverride = EditorGUILayout.BeginToggleGroup("Fog Density Override", _fogDensityOverride); _fogDensity.Value = EditorGUILayout.FloatField("Fog Density:", _fogDensity); EditorGUILayout.EndToggleGroup(); } }
static dynamic Decode(BinaryReader reader, int version, Type ensure = null) { Type t = DecodeID(reader); if (ensure != null && ensure != t) { throw new InvalidDataException(); } if (t == typeof(Copyable)) { return new Copyable() { Contents = Enumerable.Range(0, reader.ReadInt32()).Select(i => Decode <ISelect>(reader, version)).ToList() } } ; else if (t == typeof(Project)) { int bpm = reader.ReadInt32(); int[] macros = (version >= 25)? Enumerable.Range(0, 4).Select(i => reader.ReadInt32()).ToArray() : new int[4] { reader.ReadInt32(), 1, 1, 1 }; List <Track> tracks = Enumerable.Range(0, reader.ReadInt32()).Select(i => Decode <Track>(reader, version)).ToList(); string author = ""; long time = 0; long started = 0; if (version >= 17) { author = reader.ReadString(); time = reader.ReadInt64(); started = reader.ReadInt64(); } UndoManager undo = null; if (version >= 30) { undo = Decode <UndoManager>(reader, version); } return(new Project(bpm, macros, tracks, author, time, started, undo)); } else if (t == typeof(Track)) { Chain chain = Decode <Chain>(reader, version); Launchpad lp = Decode <Launchpad>(reader, version); string name = reader.ReadString(); bool enabled = true; if (version >= 8) { enabled = reader.ReadBoolean(); } return(new Track(chain, lp, name) { Enabled = enabled }); } else if (t == typeof(Chain)) { List <Device> devices = Enumerable.Range(0, reader.ReadInt32()).Select(i => Decode <Device>(reader, version)).ToList(); string name = reader.ReadString(); bool enabled = true; if (version >= 6) { enabled = reader.ReadBoolean(); } bool[] filter = null; if (version >= 29) { filter = Enumerable.Range(0, 101).Select(i => reader.ReadBoolean()).ToArray(); } return(new Chain(devices, name, filter) { Enabled = enabled }); } else if (t == typeof(Device)) { bool collapsed = false; if (version >= 5) { collapsed = reader.ReadBoolean(); } bool enabled = true; if (version >= 5) { enabled = reader.ReadBoolean(); } Device ret = (Device)Decode(reader, version); // This needs to be a cast! ret.Collapsed = collapsed; ret.Enabled = enabled; return(ret); } else if (t == typeof(Launchpad)) { string name = reader.ReadString(); if (name == "") { return(MIDI.NoOutput); } InputType format = InputType.DrumRack; if (version >= 2) { format = (InputType)reader.ReadInt32(); } RotationType rotation = RotationType.D0; if (version >= 9) { rotation = (RotationType)reader.ReadInt32(); } foreach (Launchpad lp in MIDI.Devices) { if (lp.Name == name) { if (lp.GetType() == typeof(Launchpad)) { lp.InputFormat = format; lp.Rotation = rotation; } return(lp); } } Launchpad ret; if (name.Contains("Virtual Launchpad ")) { ret = new VirtualLaunchpad(name, Convert.ToInt32(name.Substring(18))); } else if (name.Contains("Ableton Connector ")) { ret = new AbletonLaunchpad(name); } else { ret = new Launchpad(name, format, rotation); } MIDI.Devices.Add(ret); return(ret); } else if (t == typeof(Group)) { return(new Group( Enumerable.Range(0, reader.ReadInt32()).Select(i => Decode <Chain>(reader, version)).ToList(), reader.ReadBoolean()? (int?)reader.ReadInt32() : null )); } else if (t == typeof(Choke)) { return(new Choke( reader.ReadInt32(), Decode <Chain>(reader, version) )); } else if (t == typeof(Clear)) { return(new Clear( (ClearType)reader.ReadInt32() )); } else if (t == typeof(ColorFilter)) { return(new ColorFilter( reader.ReadDouble(), reader.ReadDouble(), reader.ReadDouble(), reader.ReadDouble(), reader.ReadDouble(), reader.ReadDouble() )); } else if (t == typeof(Copy)) { Time time; if (version <= 2) { time = new Time( reader.ReadBoolean(), Decode(reader, version), reader.ReadInt32() ); } else { time = Decode(reader, version); } double gate; if (version <= 13) { gate = (double)reader.ReadDecimal(); } else { gate = reader.ReadDouble(); } double pinch = 0; if (version >= 26) { pinch = reader.ReadDouble(); } bool bilateral = false; if (version >= 28) { bilateral = reader.ReadBoolean(); } bool reverse = false; if (version >= 26) { reverse = reader.ReadBoolean(); } bool infinite = false; if (version >= 27) { infinite = reader.ReadBoolean(); } CopyType copyType = (CopyType)reader.ReadInt32(); GridType gridType = (GridType)reader.ReadInt32(); bool wrap = reader.ReadBoolean(); int count; List <Offset> offsets = Enumerable.Range(0, count = reader.ReadInt32()).Select(i => Decode <Offset>(reader, version)).ToList(); List <int> angles = Enumerable.Range(0, count).Select(i => (version >= 25)? reader.ReadInt32() : 0).ToList(); return(new Copy(time, gate, pinch, bilateral, reverse, infinite, copyType, gridType, wrap, offsets, angles)); } else if (t == typeof(Delay)) { Time time; if (version <= 2) { time = new Time( reader.ReadBoolean(), Decode(reader, version), reader.ReadInt32() ); } else { time = Decode(reader, version); } double gate; if (version <= 13) { gate = (double)reader.ReadDecimal(); } else { gate = reader.ReadDouble(); } return(new Delay(time, gate)); } else if (t == typeof(Fade)) { Time time; if (version <= 2) { time = new Time( reader.ReadBoolean(), Decode(reader, version), reader.ReadInt32() ); } else { time = Decode(reader, version); } double gate; if (version <= 13) { gate = (double)reader.ReadDecimal(); } else { gate = reader.ReadDouble(); } FadePlaybackType playmode = (FadePlaybackType)reader.ReadInt32(); int count; List <Color> colors = Enumerable.Range(0, count = reader.ReadInt32()).Select(i => Decode <Color>(reader, version)).ToList(); List <double> positions = Enumerable.Range(0, count).Select(i => (version <= 13)? (double)reader.ReadDecimal() : reader.ReadDouble()).ToList(); List <FadeType> types = Enumerable.Range(0, count - 1).Select(i => (version <= 24) ? FadeType.Linear : (FadeType)reader.ReadInt32()).ToList(); int?expanded = null; if (version >= 23) { expanded = reader.ReadBoolean()? (int?)reader.ReadInt32() : null; } return(new Fade(time, gate, playmode, colors, positions, types, expanded)); } else if (t == typeof(Flip)) { return(new Flip( (FlipType)reader.ReadInt32(), reader.ReadBoolean() )); } else if (t == typeof(Hold)) { Time time; if (version <= 2) { time = new Time( reader.ReadBoolean(), Decode(reader, version), reader.ReadInt32() ); } else { time = Decode(reader, version); } double gate; if (version <= 13) { gate = (double)reader.ReadDecimal(); } else { gate = reader.ReadDouble(); } HoldType holdmode; if (version <= 31) { holdmode = reader.ReadBoolean()? HoldType.Infinite : HoldType.Trigger; } else { holdmode = (HoldType)reader.ReadInt32(); } return(new Hold( time, gate, holdmode, reader.ReadBoolean() )); } else if (t == typeof(KeyFilter)) { bool[] filter; if (version <= 18) { List <bool> oldFilter = Enumerable.Range(0, 100).Select(i => reader.ReadBoolean()).ToList(); oldFilter.Insert(99, false); filter = oldFilter.ToArray(); } else { filter = Enumerable.Range(0, 101).Select(i => reader.ReadBoolean()).ToArray(); } return(new KeyFilter(filter)); } else if (t == typeof(Layer)) { int target = reader.ReadInt32(); BlendingType blending = BlendingType.Normal; if (version >= 5) { if (version == 5) { blending = (BlendingType)reader.ReadInt32(); if ((int)blending == 2) { blending = BlendingType.Mask; } } else { blending = (BlendingType)reader.ReadInt32(); } } int range = 200; if (version >= 21) { range = reader.ReadInt32(); } return(new Layer(target, blending, range)); } else if (t == typeof(LayerFilter)) { return(new LayerFilter( reader.ReadInt32(), reader.ReadInt32() )); } else if (t == typeof(Loop)) { return(new Loop( Decode(reader, version), reader.ReadDouble(), reader.ReadInt32(), reader.ReadBoolean() )); } else if (t == typeof(Move)) { return(new Move( Decode(reader, version), (GridType)reader.ReadInt32(), reader.ReadBoolean() )); } else if (t == typeof(Multi)) { Chain preprocess = Decode(reader, version); int count = reader.ReadInt32(); List <Chain> init = Enumerable.Range(0, count).Select(i => Decode <Chain>(reader, version)).ToList(); if (version == 28) { List <bool[]> filters = Enumerable.Range(0, count).Select(i => Enumerable.Range(0, 101).Select(i => reader.ReadBoolean()).ToArray() ).ToList(); for (int i = 0; i < count; i++) { init[i].SecretMultiFilter = filters[i]; } } int? expanded = reader.ReadBoolean()? (int?)reader.ReadInt32() : null; MultiType mode = (MultiType)reader.ReadInt32(); return(new Multi(preprocess, init, expanded, mode)); } else if (t == typeof(Output)) { return(new Output( reader.ReadInt32() )); } else if (t == typeof(MacroFilter)) { return(new MacroFilter( (version >= 25)? reader.ReadInt32() : 1, Enumerable.Range(0, 100).Select(i => reader.ReadBoolean()).ToArray() )); } else if (t == typeof(Paint)) { return(new Paint( Decode(reader, version) )); } else if (t == typeof(Pattern)) { int repeats = 1; if (version >= 11) { repeats = reader.ReadInt32(); } double gate; if (version <= 13) { gate = (double)reader.ReadDecimal(); } else { gate = reader.ReadDouble(); } double pinch = 0; if (version >= 24) { pinch = reader.ReadDouble(); } bool bilateral = false; if (version >= 28) { bilateral = reader.ReadBoolean(); } List <Frame> frames = Enumerable.Range(0, reader.ReadInt32()).Select(i => Decode <Frame>(reader, version)).ToList(); PlaybackType mode = (PlaybackType)reader.ReadInt32(); bool chokeenabled = false; int choke = 8; if (version <= 10) { chokeenabled = reader.ReadBoolean(); if (version <= 0) { if (chokeenabled) { choke = reader.ReadInt32(); } } else { choke = reader.ReadInt32(); } } bool infinite = false; if (version >= 4) { infinite = reader.ReadBoolean(); } int?rootkey = null; if (version >= 12) { rootkey = reader.ReadBoolean()? (int?)reader.ReadInt32() : null; } bool wrap = false; if (version >= 13) { wrap = reader.ReadBoolean(); } int expanded = reader.ReadInt32(); Pattern ret = new Pattern(repeats, gate, pinch, bilateral, frames, mode, infinite, rootkey, wrap, expanded); if (chokeenabled) { return(new Choke(choke, new Chain(new List <Device>() { ret }))); } return(ret); } else if (t == typeof(Preview)) { return(new Preview()); } else if (t == typeof(Rotate)) { return(new Rotate( (RotateType)reader.ReadInt32(), reader.ReadBoolean() )); } else if (t == typeof(Refresh)) { return(new Refresh( Enumerable.Range(0, 4).Select(i => reader.ReadBoolean()).ToArray() )); } else if (t == typeof(Switch)) { int target = (version >= 25)? reader.ReadInt32() : 1; int value = reader.ReadInt32(); if (18 <= version && version <= 21 && reader.ReadBoolean()) { return(new Group(new List <Chain>() { new Chain(new List <Device>() { new Switch(1, value), new Clear(ClearType.Multi) }, "Switch Reset") })); } return(new Switch(target, value)); } else if (t == typeof(Tone)) { return(new Tone( reader.ReadDouble(), reader.ReadDouble(), reader.ReadDouble(), reader.ReadDouble(), reader.ReadDouble() )); } else if (t == typeof(Color)) { byte red = reader.ReadByte(); byte green = reader.ReadByte(); byte blue = reader.ReadByte(); if (version == 24) { if (red > 0) { red = (byte)((red - 1) * 62.0 / 126 + 1); } if (green > 0) { green = (byte)((green - 1) * 62.0 / 126 + 1); } if (blue > 0) { blue = (byte)((blue - 1) * 62.0 / 126 + 1); } } return(new Color(red, green, blue)); } else if (t == typeof(Frame)) { Time time; if (version <= 2) { time = new Time( reader.ReadBoolean(), Decode(reader, version), reader.ReadInt32() ); } else { time = Decode(reader, version); } Color[] screen; if (version <= 19) { List <Color> oldScreen = Enumerable.Range(0, 100).Select(i => Decode <Color>(reader, version)).ToList(); oldScreen.Insert(99, new Color(0)); screen = oldScreen.ToArray(); } else { screen = Enumerable.Range(0, 101).Select(i => Decode <Color>(reader, version)).ToArray(); } return(new Frame(time, screen)); } else if (t == typeof(Length)) { return(new Length( reader.ReadInt32() )); } else if (t == typeof(Offset)) { int x = reader.ReadInt32(); int y = reader.ReadInt32(); bool absolute = false; int ax = 5; int ay = 5; if (version >= 25) { absolute = reader.ReadBoolean(); ax = reader.ReadInt32(); ay = reader.ReadInt32(); } return(new Offset(x, y, absolute, ax, ay)); } else if (t == typeof(Time)) { return(new Time( reader.ReadBoolean(), Decode(reader, version), reader.ReadInt32() )); } else if (t == typeof(UndoManager)) { int undoVersion = reader.ReadInt32(); int size = reader.ReadInt32(); if (undoVersion == UndoBinary.Version) { return(new UndoManager( Enumerable.Range(0, reader.ReadInt32()).Select(i => UndoEntry.DecodeEntry(reader, version)).ToList(), reader.ReadInt32() )); } reader.ReadBytes(size); return(new UndoManager()); } throw new InvalidDataException(); }
public abstract void PushBlendingType(BlendingType blendingType);