A game about forced loneliness, made by TACStudios
at master 242 lines 9.0 kB view raw
1using UnityEngine; 2using UnityEditor.Graphing; 3using UnityEditor.ShaderGraph.Drawing.Controls; 4using UnityEditor.ShaderGraph.Internal; 5 6namespace UnityEditor.ShaderGraph 7{ 8 internal enum Texture2DMipSamplingMode 9 { 10 Standard, 11 LOD, 12 Gradient, 13 Bias 14 } 15 16 internal enum Texture3DMipSamplingMode 17 { 18 Standard, 19 LOD 20 } 21 22 internal struct Mip2DSamplingInputs 23 { 24 public int biasInput; 25 public int lodInput; 26 public int ddxInput; 27 public int ddyInput; 28 public MaterialSlot bias; 29 public MaterialSlot lod; 30 public MaterialSlot ddx; 31 public MaterialSlot ddy; 32 33 public static Mip2DSamplingInputs NewDefault() 34 { 35 return new Mip2DSamplingInputs() 36 { 37 bias = null, 38 lod = null, 39 ddx = null, 40 ddy = null 41 }; 42 } 43 } 44 45 internal struct Mip3DSamplingInputs 46 { 47 public int lodInput; 48 public MaterialSlot lod; 49 50 public static Mip3DSamplingInputs NewDefault() 51 { 52 return new Mip3DSamplingInputs() 53 { 54 lod = null 55 }; 56 } 57 } 58 59 internal static class MipSamplingModesUtils 60 { 61 private static string kLodName = "LOD"; 62 private static string kBiasName = "Bias"; 63 private static string kDdxName = "DDX"; 64 private static string kDdyName = "DDY"; 65 66 public static string Get2DTextureSamplingMacro(Texture2DMipSamplingMode mode, bool usePlatformMacros, bool isArray) 67 { 68 if (isArray) 69 { 70 if (usePlatformMacros) 71 { 72 switch (mode) 73 { 74 case Texture2DMipSamplingMode.Standard: 75 return "PLATFORM_SAMPLE_TEXTURE2D_ARRAY"; 76 case Texture2DMipSamplingMode.LOD: 77 return "PLATFORM_SAMPLE_TEXTURE2D_ARRAY_LOD"; 78 case Texture2DMipSamplingMode.Bias: 79 return "PLATFORM_SAMPLE_TEXTURE2D_ARRAY_BIAS"; 80 case Texture2DMipSamplingMode.Gradient: 81 return "PLATFORM_SAMPLE_TEXTURE2D_ARRAY_GRAD"; 82 } 83 } 84 else 85 { 86 switch (mode) 87 { 88 case Texture2DMipSamplingMode.Standard: 89 return "SAMPLE_TEXTURE2D_ARRAY"; 90 case Texture2DMipSamplingMode.LOD: 91 return "SAMPLE_TEXTURE2D_ARRAY_LOD"; 92 case Texture2DMipSamplingMode.Bias: 93 return "SAMPLE_TEXTURE2D_ARRAY_BIAS"; 94 case Texture2DMipSamplingMode.Gradient: 95 return "SAMPLE_TEXTURE2D_ARRAY_GRAD"; 96 } 97 } 98 } 99 else 100 { 101 if (usePlatformMacros) 102 { 103 switch (mode) 104 { 105 case Texture2DMipSamplingMode.Standard: 106 return "PLATFORM_SAMPLE_TEXTURE2D"; 107 case Texture2DMipSamplingMode.LOD: 108 return "PLATFORM_SAMPLE_TEXTURE2D_LOD"; 109 case Texture2DMipSamplingMode.Bias: 110 return "PLATFORM_SAMPLE_TEXTURE2D_BIAS"; 111 case Texture2DMipSamplingMode.Gradient: 112 return "PLATFORM_SAMPLE_TEXTURE2D_GRAD"; 113 } 114 } 115 else 116 { 117 switch (mode) 118 { 119 case Texture2DMipSamplingMode.Standard: 120 return "SAMPLE_TEXTURE2D"; 121 case Texture2DMipSamplingMode.LOD: 122 return "SAMPLE_TEXTURE2D_LOD"; 123 case Texture2DMipSamplingMode.Bias: 124 return "SAMPLE_TEXTURE2D_BIAS"; 125 case Texture2DMipSamplingMode.Gradient: 126 return "SAMPLE_TEXTURE2D_GRAD"; 127 } 128 } 129 } 130 131 return ""; 132 } 133 134 public static string Get3DTextureSamplingMacro(Texture3DMipSamplingMode mode, bool usePlatformMacros) 135 { 136 if (usePlatformMacros) 137 { 138 switch (mode) 139 { 140 case Texture3DMipSamplingMode.Standard: 141 return "PLATFORM_SAMPLE_TEXTURE3D"; 142 case Texture3DMipSamplingMode.LOD: 143 return "PLATFORM_SAMPLE_TEXTURE2D_LOD"; 144 } 145 } 146 else 147 { 148 switch (mode) 149 { 150 case Texture3DMipSamplingMode.Standard: 151 return "SAMPLE_TEXTURE3D"; 152 case Texture3DMipSamplingMode.LOD: 153 return "SAMPLE_TEXTURE3D_LOD"; 154 } 155 } 156 157 return ""; 158 } 159 160 public static Mip2DSamplingInputs CreateMip2DSamplingInputs( 161 AbstractMaterialNode node, Texture2DMipSamplingMode mode, Mip2DSamplingInputs previousInputs, 162 int biasInputId, int lodInputId, int ddxInputId, int ddyInputId) 163 { 164 if (previousInputs.bias != null) 165 node.RemoveSlot(previousInputs.bias.id); 166 if (previousInputs.lod != null) 167 node.RemoveSlot(previousInputs.lod.id); 168 if (previousInputs.ddx != null) 169 node.RemoveSlot(previousInputs.ddx.id); 170 if (previousInputs.ddy != null) 171 node.RemoveSlot(previousInputs.ddy.id); 172 173 Mip2DSamplingInputs inputs = Mip2DSamplingInputs.NewDefault(); 174 inputs.biasInput = biasInputId; 175 inputs.lodInput = lodInputId; 176 inputs.ddxInput = ddxInputId; 177 inputs.ddyInput = ddyInputId; 178 switch (mode) 179 { 180 case Texture2DMipSamplingMode.LOD: 181 inputs.lod = node.AddSlot(new Vector1MaterialSlot(lodInputId, kLodName, kLodName, SlotType.Input, 0.0f)); 182 break; 183 case Texture2DMipSamplingMode.Bias: 184 inputs.bias = node.AddSlot(new Vector1MaterialSlot(biasInputId, kBiasName, kBiasName, SlotType.Input, 0.0f)); 185 break; 186 case Texture2DMipSamplingMode.Gradient: 187 inputs.ddx = node.AddSlot(new Vector2MaterialSlot(ddxInputId, kDdxName, kDdxName, SlotType.Input, new Vector2(0.0f, 0.0f))); 188 inputs.ddy = node.AddSlot(new Vector2MaterialSlot(ddyInputId, kDdyName, kDdyName, SlotType.Input, new Vector2(0.0f, 0.0f))); 189 break; 190 } 191 192 return inputs; 193 } 194 195 public static Mip3DSamplingInputs CreateMip3DSamplingInputs( 196 AbstractMaterialNode node, Texture3DMipSamplingMode mode, Mip3DSamplingInputs previousInputs, 197 int lodInputId) 198 { 199 if (previousInputs.lod != null) 200 node.RemoveSlot(previousInputs.lod.id); 201 202 Mip3DSamplingInputs inputs = Mip3DSamplingInputs.NewDefault(); 203 inputs.lodInput = lodInputId; 204 switch (mode) 205 { 206 case Texture3DMipSamplingMode.LOD: 207 inputs.lod = node.AddSlot(new Vector1MaterialSlot(lodInputId, kLodName, kLodName, SlotType.Input, 0.0f)); 208 break; 209 } 210 211 return inputs; 212 } 213 214 public static string GetSamplerMipArgs( 215 AbstractMaterialNode node, Texture2DMipSamplingMode mode, Mip2DSamplingInputs inputs, GenerationMode generationMode) 216 { 217 switch (mode) 218 { 219 case Texture2DMipSamplingMode.LOD: 220 return string.Format(", {0}", node.GetSlotValue(inputs.lodInput, generationMode)); 221 case Texture2DMipSamplingMode.Bias: 222 return string.Format(", {0}", node.GetSlotValue(inputs.biasInput, generationMode)); 223 case Texture2DMipSamplingMode.Gradient: 224 return string.Format(", {0}, {1}", node.GetSlotValue(inputs.ddxInput, generationMode), node.GetSlotValue(inputs.ddyInput, generationMode)); 225 } 226 227 return ""; 228 } 229 230 public static string GetSamplerMipArgs( 231 AbstractMaterialNode node, Texture3DMipSamplingMode mode, Mip3DSamplingInputs inputs, GenerationMode generationMode) 232 { 233 switch (mode) 234 { 235 case Texture3DMipSamplingMode.LOD: 236 return string.Format(", {0}", node.GetSlotValue(inputs.lodInput, generationMode)); 237 } 238 239 return ""; 240 } 241 } 242}