43 lines
1.4 KiB
C#
43 lines
1.4 KiB
C#
using System;
|
|
using UnityEngine.Assertions;
|
|
|
|
namespace UnityEngine.Rendering.PostProcessing
|
|
{
|
|
[UnityEngine.Scripting.Preserve]
|
|
[Serializable]
|
|
internal sealed class Dithering
|
|
{
|
|
int m_NoiseTextureIndex = 0;
|
|
System.Random m_Random = new System.Random(1234);
|
|
|
|
internal void Render(PostProcessRenderContext context)
|
|
{
|
|
var blueNoise = context.resources.blueNoise64;
|
|
Assert.IsTrue(blueNoise != null && blueNoise.Length > 0);
|
|
|
|
#if POSTFX_DEBUG_STATIC_DITHERING // Used by QA for automated testing
|
|
m_NoiseTextureIndex = 0;
|
|
float rndOffsetX = 0f;
|
|
float rndOffsetY = 0f;
|
|
#else
|
|
if (++m_NoiseTextureIndex >= blueNoise.Length)
|
|
m_NoiseTextureIndex = 0;
|
|
|
|
float rndOffsetX = (float)m_Random.NextDouble();
|
|
float rndOffsetY = (float)m_Random.NextDouble();
|
|
#endif
|
|
|
|
var noiseTex = blueNoise[m_NoiseTextureIndex];
|
|
var uberSheet = context.uberSheet;
|
|
|
|
uberSheet.properties.SetTexture(ShaderIDs.DitheringTex, noiseTex);
|
|
uberSheet.properties.SetVector(ShaderIDs.Dithering_Coords, new Vector4(
|
|
(float)context.screenWidth / (float)noiseTex.width,
|
|
(float)context.screenHeight / (float)noiseTex.height,
|
|
rndOffsetX,
|
|
rndOffsetY
|
|
));
|
|
}
|
|
}
|
|
}
|