BITFALL/Assets/Plugins/_MK/MKGlow/Scripts/PipelineProperties.cs

211 lines
13 KiB
C#
Raw Normal View History

2023-10-20 19:31:12 +08:00
//////////////////////////////////////////////////////
// MK Glow Pipeline Properties //
// //
// Created by Michael Kremmel //
// www.michaelkremmel.de //
// Copyright © 2021 All rights reserved. //
//////////////////////////////////////////////////////
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace MK.Glow
{
#if UNITY_2018_3_OR_NEWER
using XRSettings = UnityEngine.XR.XRSettings;
#endif
/// <summary>
/// Contains all PipelineProperties used in MK Glow
/// </summary>
internal static class PipelineProperties
{
//For even super large displays preserve some extra memory to prevent erros and gc.
internal static readonly int renderBufferSize = 15;
internal static bool scriptableRenderPipelineActive{ get { return UnityEngine.Rendering.GraphicsSettings.renderPipelineAsset != null; } }
#if UNITY_2018_3_OR_NEWER
#if ENABLE_VR
internal static bool xrEnabled { get{ return XRSettings.enabled; } }
internal static bool singlePassStereoDoubleWideEnabled { get{ return XRSettings.enabled && XRSettings.stereoRenderingMode == XRSettings.StereoRenderingMode.SinglePass; } }
internal static bool singlePassStereoInstancedEnabled { get{ return XRSettings.enabled && (XRSettings.stereoRenderingMode == XRSettings.StereoRenderingMode.SinglePassInstanced || XRSettings.stereoRenderingMode == XRSettings.StereoRenderingMode.SinglePassMultiview); } }
#else
internal static bool xrEnabled { get{ return false; } }
internal static bool singlePassStereoDoubleWideEnabled { get{ return false; } }
internal static bool singlePassStereoInstancedEnabled { get{ return false; } }
#endif
#else
//No proper way of detecting stereo rendering mode so just return false
internal static bool xrEnabled { get{ return false; } }
internal static bool singlePassStereoDoubleWideEnabled { get{ return false; } }
internal static bool singlePassStereoInstancedEnabled { get{ return false; } }
#endif
/// <summary>
/// Shader PipelineProperties as IDs
/// </summary>
internal static class ShaderProperties
{
/// <summary>
/// Representation of a render property based on unity version
/// The id of the given name will be autogenerated
/// </summary>
internal class DefaultProperty
{
protected string _name;
internal string name
{
get{return _name;}
}
#if UNITY_2017_3_OR_NEWER
protected int _id;
internal int id
{
get{return _id;}
}
#else
internal string id
{
get{return _name;}
}
#endif
internal DefaultProperty(string name)
{
this._name = name;
#if UNITY_2017_3_OR_NEWER
this._id = Shader.PropertyToID(name);
#endif
}
}
/// <summary>
/// Constant args buffer property, mostly used for storing floats based on the positon in the args buffer
/// </summary>
internal sealed class CBufferProperty : DefaultProperty
{
private int _index;
/// <summary>
/// Position in the buffer
/// </summary>
/// <value></value>
internal int index
{
get{return _index;}
}
/// <summary>
/// Length of the content in bytes
/// </summary>
private int _size;
internal int size
{
get{return _size;}
}
internal CBufferProperty(string name, int index, int size) : base ("")
{
this._name = name;
#if UNITY_2017_3_OR_NEWER
this._id = Shader.PropertyToID(name);
#endif
this._index = index;
this._size = size;
}
}
//Main, Bloom
internal static readonly CBufferProperty screenSize = new CBufferProperty("_DisplaySize", 0, 2);
internal static readonly CBufferProperty singlePassStereoScale = new CBufferProperty("_SinglePassStereoScale", 65, 1);
internal static readonly CBufferProperty viewMatrix = new CBufferProperty("_ViewMatrix", 49, 16);
internal static readonly DefaultProperty cArgBuffer = new DefaultProperty("_CArgBuffer");
internal static readonly DefaultProperty sourceTex = new DefaultProperty("_SourceTex");
internal static readonly DefaultProperty targetTex = new DefaultProperty("_TargetTex");
internal static readonly DefaultProperty copyTargetTex = new DefaultProperty("_CopyTargetTex");
internal static readonly DefaultProperty bloomTex = new DefaultProperty("_BloomTex");
internal static readonly DefaultProperty bloomTargetTex = new DefaultProperty("_BloomTargetTex");
internal static readonly CBufferProperty bloomSpread = new CBufferProperty("_BloomSpread", 3, 1);
internal static readonly CBufferProperty bloomThreshold = new CBufferProperty("_BloomThreshold", 0, 2);
internal static readonly CBufferProperty lumaScale = new CBufferProperty("_LumaScale", 2, 1);
internal static readonly CBufferProperty bloomIntensity = new CBufferProperty("_BloomIntensity", 4, 1);
internal static readonly CBufferProperty blooming = new CBufferProperty("_Blooming", 5, 1);
internal static readonly DefaultProperty higherMipBloomTex = new DefaultProperty("_HigherMipBloomTex");
internal static readonly CBufferProperty resolutionScale = new CBufferProperty("_ResolutionScale", 38, 2);
internal static readonly CBufferProperty renderTargetSize = new CBufferProperty("_RenderTargetSize", 38, 2);
//Lens Surface
internal static readonly DefaultProperty lensSurfaceDirtTex = new DefaultProperty("_LensSurfaceDirtTex");
internal static readonly DefaultProperty lensSurfaceDiffractionTex = new DefaultProperty("_LensSurfaceDiffractionTex");
internal static readonly CBufferProperty lensSurfaceDirtIntensity = new CBufferProperty("_LensSurfaceDirtIntensity", 6, 1);
internal static readonly CBufferProperty lensSurfaceDiffractionIntensity = new CBufferProperty("_LensSurfaceDiffractionIntensity", 7, 1);
internal static readonly CBufferProperty lensSurfaceDirtTexST = new CBufferProperty("_LensSurfaceDirtTex_ST", 44, 4);
//Lens Flare
internal static readonly CBufferProperty lensFlareThreshold = new CBufferProperty("_LensFlareThreshold", 8, 2);
internal static readonly CBufferProperty lensFlareGhostParams = new CBufferProperty("_LensFlareGhostParams", 10, 4);
internal static readonly CBufferProperty lensFlareHaloParams = new CBufferProperty("_LensFlareHaloParams", 14, 3);
internal static readonly DefaultProperty lensFlareTex = new DefaultProperty("_LensFlareTex");
internal static readonly DefaultProperty lensFlareTargetTex = new DefaultProperty("_LensFlareTargetTex");
internal static readonly CBufferProperty lensFlareSpread = new CBufferProperty("_LensFlareSpread", 17, 1);
internal static readonly CBufferProperty lensFlareChromaticAberration = new CBufferProperty("_LensFlareChromaticAberration", 18, 1);
internal static readonly DefaultProperty lensFlareColorRamp = new DefaultProperty("_LensFlareColorRamp");
//Glare
internal static readonly CBufferProperty glareThreshold = new CBufferProperty("_GlareThreshold", 19, 2);
internal static readonly CBufferProperty glareBlend = new CBufferProperty("_GlareBlend", 33, 1);
internal static readonly CBufferProperty glareGlobalIntensity = new CBufferProperty("_GlareGlobalIntensity", 33, 1);
internal static readonly CBufferProperty glareIntensity = new CBufferProperty("_GlareIntensity", 34, 4);
internal static readonly CBufferProperty glareScattering = new CBufferProperty("_GlareScattering", 21, 4);
internal static readonly CBufferProperty glareDirection01 = new CBufferProperty("_GlareDirection01", 25, 4);
internal static readonly CBufferProperty glareDirection23 = new CBufferProperty("_GlareDirection23", 29, 4);
internal static readonly CBufferProperty glareOffset = new CBufferProperty("_GlareOffset", 40, 4);
internal static readonly DefaultProperty glare0Tex = new DefaultProperty("_Glare0Tex");
internal static readonly DefaultProperty glare0TargetTex = new DefaultProperty("_Glare0TargetTex");
internal static readonly DefaultProperty glare1Tex = new DefaultProperty("_Glare1Tex");
internal static readonly DefaultProperty glare1TargetTex = new DefaultProperty("_Glare1TargetTex");
internal static readonly DefaultProperty glare2Tex = new DefaultProperty("_Glare2Tex");
internal static readonly DefaultProperty glare2TargetTex = new DefaultProperty("_Glare2TargetTex");
internal static readonly DefaultProperty glare3Tex = new DefaultProperty("_Glare3Tex");
internal static readonly DefaultProperty glare3TargetTex = new DefaultProperty("_Glare3TargetTex");
}
/// <summary>
/// CommandBuffer PipelineProperties as strings
/// </summary>
internal static class CommandBufferProperties
{
//Main
internal static readonly string commandBufferName = "MK Glow";
internal static readonly string selectiveRenderBuffer = "_SelectiveRenderBuffer";
internal static readonly string depthBuffer = "_DepthBuffer";
internal static readonly string bloomDownsampleBuffer = "_BloomDownsampleBuffer";
internal static readonly string bloomUpsampleBuffer = "_BloomUpsampleBuffer";
internal static readonly string sourceBuffer = "_SourceBuffer";
//Glare
internal static readonly string glareDownsampleBuffer0 = "GlareDownsampleBuffer0";
internal static readonly string glareDownsampleBuffer1 = "GlareDownsampleBuffer1";
internal static readonly string glareDownsampleBuffer2 = "GlareDownsampleBuffer2";
internal static readonly string glareDownsampleBuffer3 = "GlareDownsampleBuffer3";
internal static readonly string glareUpsampleBuffer0 = "GlareUpsampleBuffer0";
internal static readonly string glareUpsampleBuffer1 = "GlareUpsampleBuffer1";
internal static readonly string glareUpsampleBuffer2 = "GlareUpsampleBuffer2";
internal static readonly string glareUpsampleBuffer3 = "GlareUpsampleBuffer3";
//Lens Flare
internal static readonly string lensFlareDownsampleBuffer = "LensFlareDownsampleBuffer";
internal static readonly string lensFlareUpsampleBuffer = "LensFlareUpsampleBuffer";
//Buffer Samples
internal static readonly string sampleDownsample = "Downsample";
internal static readonly string samplePreSample = "Presample";
internal static readonly string sampleUpsample = "Upsample";
internal static readonly string sampleComposite = "Composite";
internal static readonly string sampleCreateBuffers = "Create Mip Buffers";
internal static readonly string sampleClearBuffers = "Clear Mip Buffers";
internal static readonly string sampleSetup = "Setup Constant Buffer";
internal static readonly string sampleCopySource = "Copy Source";
internal static readonly string sampleReplacement = "Render Replacement";
internal static readonly string samplePrepare = "Prepare";
}
}
}