First Commit

This commit is contained in:
2025-05-18 22:39:39 +03:00
commit 042ede7228
440 changed files with 103153 additions and 0 deletions

View File

@@ -0,0 +1,140 @@
using Golems.RenderFeatures;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
namespace Golems
{
public class ComposeOutlineScriptableRenderFeature : SourceToDestinationBlitRenderFeature
{
[SerializeField] private bool m_IsEnabled = true;
[Header("Compose things")]
[SerializeField] private Material m_CompositeMaterial = default;
private ComposeOutlinePass m_Pass;
public override void Create()
{
m_Pass = new ComposeOutlinePass(m_CompositeMaterial);
DoCreate();
}
private void DebugSetEnabledState(bool state)
{
m_IsEnabled = state;
}
private bool DebugGetEnabledState()
{
return m_IsEnabled;
}
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
if (IsSourceAndDestinationSame())
{
//
// The source and destination are same can skip the pass if there is
// nothing to render.
//
var outlineObjects = OutlineCollection.RendererBundles;
if (outlineObjects == null || outlineObjects.Count <= 0)
{
return;
}
}
m_Pass.Setup(m_IsEnabled,m_WhenToInsert, renderer.cameraColorTarget,
m_SourceTextureSourceType, m_SourceNamedTemporaryNameHash,
m_DestinationTextureSourceType, m_DestinationNamedTemporaryNameHash,
m_TempCopyNamedTemporaryNameHash);
renderer.EnqueuePass(m_Pass);
}
}
public class ComposeOutlinePass : SourceToDestinationBlitRenderPass
{
private const string k_ProfilerIdent = "ComposeOutlinePass";
private Material m_CompositeMat = null;
private bool m_IsEnabled;
private readonly int m_BlurTexId = Shader.PropertyToID("_BlurTex");
private readonly int m_DefaultDrawObjectsTexId = Shader.PropertyToID("_DefaultDrawObjects");
public ComposeOutlinePass(Material compositeMaterial)
{
m_CompositeMat = compositeMaterial;
}
public void Setup(bool isEnabled, RenderPassEvent whenToRender, RenderTargetIdentifier cameraColourTargetIdentifier,
RenderFeatures.TextureSourceType sourceSourceType, int tempSourceTextureHash,
RenderFeatures.TextureSourceType destinationSourceType, int tempDestinationTextureHash,
int sameSourceDestTextureHash)
{
m_IsEnabled = isEnabled;
DoSetup(whenToRender, cameraColourTargetIdentifier,
sourceSourceType, tempSourceTextureHash,
destinationSourceType, tempDestinationTextureHash,
sameSourceDestTextureHash);
}
public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData)
{
DoOnCameraSetup(cmd, ref renderingData);
}
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
{
//
// The OutlineCollection.NumberOfObjectsRendered is set during the
// OutlineScriptableRenderPass.Execute() so if that did not render anything then there is
// nothing to compose.
//
if (!m_GoodToExecute)
{
return;
}
bool doCopyOnly = (OutlineCollection.NumberOfObjectsRendered <= 0) || !m_IsEnabled;
if (doCopyOnly)
{
if (!m_SourceAndDestinationSame)
{
//
// Copy the source to the destination
//
var copyCmd = CommandBufferPool.Get(k_ProfilerIdent);
copyCmd.Blit(m_SourceTargetIdentifier, m_DestinationTargetIdentifier);
context.ExecuteCommandBuffer(copyCmd);
CommandBufferPool.Release(copyCmd);
}
return;
}
var cmd = CommandBufferPool.Get(k_ProfilerIdent);
cmd.SetGlobalTexture("_BlurTex", m_BlurTexId);
cmd.SetGlobalTexture("_DefaultDrawObjects", m_DefaultDrawObjectsTexId);
if (m_SourceAndDestinationSame)
{
cmd.Blit(m_SourceTargetIdentifier, m_TempCopyTargetIdentifier, m_CompositeMat);
cmd.Blit(m_TempCopyTargetIdentifier, m_DestinationTargetIdentifier);
}
else
{
cmd.Blit(m_SourceTargetIdentifier, m_DestinationTargetIdentifier, m_CompositeMat);
}
context.ExecuteCommandBuffer(cmd);
CommandBufferPool.Release(cmd);
}
}
}