namespace UnityEngine.PostProcessing { public sealed class UserLutComponent : PostProcessingComponentRenderTexture { static class Uniforms { internal static readonly int _UserLut = Shader.PropertyToID("_UserLut"); internal static readonly int _UserLut_Params = Shader.PropertyToID("_UserLut_Params"); } public override bool active { get { var settings = model.settings; return model.enabled && settings.lut != null && settings.contribution > 0f && settings.lut.height == (int)Mathf.Sqrt(settings.lut.width) && !context.interrupted; } } public override void Prepare(Material uberMaterial) { var settings = model.settings; uberMaterial.EnableKeyword("USER_LUT"); uberMaterial.SetTexture(Uniforms._UserLut, settings.lut); uberMaterial.SetVector(Uniforms._UserLut_Params, new Vector4(1f / settings.lut.width, 1f / settings.lut.height, settings.lut.height - 1f, settings.contribution)); } public void OnGUI() { var settings = model.settings; var rect = new Rect(context.viewport.x * Screen.width + 8f, 8f, settings.lut.width, settings.lut.height); GUI.DrawTexture(rect, settings.lut); } } }