No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

MipSamplingModes.cs 8.8KB

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