66 lines
1.7 KiB
C#
66 lines
1.7 KiB
C#
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
using RTID = UnityEngine.Rendering.RenderTargetIdentifier;
|
|
|
|
namespace Klak.Spout {
|
|
|
|
static class RendererOverride
|
|
{
|
|
static MaterialPropertyBlock _block;
|
|
|
|
public static void SetTexture
|
|
(Renderer renderer, string property, Texture texture)
|
|
{
|
|
if (_block == null) _block = new MaterialPropertyBlock();
|
|
renderer.GetPropertyBlock(_block);
|
|
_block.SetTexture(property, texture);
|
|
renderer.SetPropertyBlock(_block);
|
|
}
|
|
}
|
|
|
|
static class Blitter
|
|
{
|
|
public static void Blit
|
|
(SpoutResources resrc, Texture src, RenderTexture dst, bool alpha)
|
|
=> Graphics.Blit(src, dst, GetMaterial(resrc), alpha ? 0 : 1);
|
|
|
|
public static void BlitVFlip
|
|
(SpoutResources resrc, Texture src, RenderTexture dst, bool alpha)
|
|
=> Graphics.Blit(src, dst, GetMaterial(resrc), alpha ? 2 : 3);
|
|
|
|
public static void Blit
|
|
(SpoutResources resrc, CommandBuffer cb, RTID src, RTID dst, bool alpha)
|
|
=> cb.Blit(src, dst, GetMaterial(resrc), alpha ? 0 : 1);
|
|
|
|
public static void BlitFromSrgb
|
|
(SpoutResources resrc, Texture src, RenderTexture dst)
|
|
=> Graphics.Blit(src, dst, GetMaterial(resrc), 4);
|
|
|
|
static Material _material;
|
|
|
|
static Material GetMaterial(SpoutResources resrc)
|
|
{
|
|
if (_material == null)
|
|
{
|
|
_material = new Material(resrc.blitShader);
|
|
_material.hideFlags = HideFlags.DontSave;
|
|
}
|
|
return _material;
|
|
}
|
|
}
|
|
|
|
static class Utility
|
|
{
|
|
public static void Destroy(Object obj)
|
|
{
|
|
if (obj == null) return;
|
|
|
|
if (Application.isPlaying)
|
|
Object.Destroy(obj);
|
|
else
|
|
Object.DestroyImmediate(obj);
|
|
}
|
|
}
|
|
|
|
} // namespace Klak.Spout
|