93 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			93 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								using System.Collections;
							 | 
						||
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						||
| 
								 | 
							
								using Godot;
							 | 
						||
| 
								 | 
							
								using System;
							 | 
						||
| 
								 | 
							
								using System.Threading.Tasks;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Rokojori
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  [Tool]
							 | 
						||
| 
								 | 
							
								  [GlobalClass]
							 | 
						||
| 
								 | 
							
								  public partial class TextureChannelMixer:Action
							 | 
						||
| 
								 | 
							
								  { 
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public string inputTexturePath;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [Export]  
							 | 
						||
| 
								 | 
							
								    public string outputTexturePath;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public ImageSaveSettings outputFormat;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public TextureChannelMixerPreset preset;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [ExportGroup("Channel Adjustments")]
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public float redMultiply = 1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public float redOffset = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public float greenMultiply = 1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public float greenOffset = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public float blueMultiply = 1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public float blueOffset = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public float alphaMultiply = 1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [Export]
							 | 
						||
| 
								 | 
							
								    public float alphaOffset = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    protected override void _OnTrigger()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      if ( preset == null || 
							 | 
						||
| 
								 | 
							
								           preset.red == null ||
							 | 
						||
| 
								 | 
							
								           preset.green == null ||
							 | 
						||
| 
								 | 
							
								           preset.blue == null ||
							 | 
						||
| 
								 | 
							
								           preset.alpha == null 
							 | 
						||
| 
								 | 
							
								      )
							 | 
						||
| 
								 | 
							
								      { 
							 | 
						||
| 
								 | 
							
								        this.LogError( "The preset is not correctly setup for each channel. Add a preset and for each channel add a setting" );
							 | 
						||
| 
								 | 
							
								        return;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var texture = ResourceLoader.Load<Texture2D>( inputTexturePath );
							 | 
						||
| 
								 | 
							
								      var sourceBuffer = TextureCombinerBuffer.From( texture );
							 | 
						||
| 
								 | 
							
								      var outputBuffer = TextureCombinerBuffer.Create( sourceBuffer.width, sourceBuffer.height );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this.LogInfo( "Processing:", inputTexturePath, ">>", sourceBuffer.numPixels + " pixels" );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      for ( int i = 0; i < sourceBuffer.numPixels; i++ )
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        var sourceColor = sourceBuffer.GetIndexed( i );
							 | 
						||
| 
								 | 
							
								        var outputColor = new Color(
							 | 
						||
| 
								 | 
							
								          preset.red.GetValue( sourceColor ) * redMultiply + redOffset,
							 | 
						||
| 
								 | 
							
								          preset.green.GetValue( sourceColor ) * greenMultiply + greenOffset,
							 | 
						||
| 
								 | 
							
								          preset.blue.GetValue( sourceColor ) * blueMultiply + blueOffset,
							 | 
						||
| 
								 | 
							
								          preset.alpha.GetValue( sourceColor ) * alphaMultiply + redOffset
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        outputBuffer.SetIndexed( i, outputColor );
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this.LogInfo( "Saving:", outputTexturePath );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var it = outputBuffer.CreateImageTexture( preset.alpha.isAssigned, false );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var image = it.GetImage();
							 | 
						||
| 
								 | 
							
								      outputFormat.Save( image, outputTexturePath );
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |