61 lines
1.3 KiB
C#
61 lines
1.3 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Godot;
|
|
using System;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
namespace Rokojori
|
|
{
|
|
[Tool]
|
|
[GlobalClass]
|
|
public partial class TextureCombinerTextureLayer:TextureCombinerLayer
|
|
{
|
|
[Export]
|
|
public Texture2D texture;
|
|
|
|
[Export]
|
|
public Vector2 tiling = Vector2.One;
|
|
|
|
[Export]
|
|
public Vector2 offset = Vector2.Zero;
|
|
|
|
[Export]
|
|
public bool updateTexture;
|
|
|
|
TextureCombinerBuffer textureBuffer;
|
|
|
|
public override async Task Process( TextureCombinerProcessingRect processingRect )
|
|
{
|
|
var time = Async.StartTimer();
|
|
|
|
if ( updateTexture || textureBuffer == null )
|
|
{
|
|
textureBuffer = TextureCombinerBuffer.From( texture );
|
|
|
|
time = await Async.WaitIfExceeded( time );
|
|
}
|
|
|
|
|
|
for ( int i = 0; i < processingRect.processingWidth; i++ )
|
|
{
|
|
for ( int j = 0; j < processingRect.processingHeight; j++ )
|
|
{
|
|
var uv = processingRect.GetRelativeUV( i, j );
|
|
|
|
uv *= tiling;
|
|
uv += offset;
|
|
|
|
uv = uv.PosMod( 1f );
|
|
|
|
var color = textureBuffer.SampleBilinearUV( uv );
|
|
|
|
processingRect.SetOutputRelative( i, j, color );
|
|
}
|
|
}
|
|
|
|
return;
|
|
}
|
|
}
|
|
} |