StdLib.hlsl 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // Subset of PostProcessing's stdlib.hlsl
  2. #ifndef UNITY_CMWAVEFORM_STDLIB
  3. #define UNITY_CMWAVEFORM_STDLIB
  4. const float _RenderViewportScaleFactor = 1;
  5. #define FLT_EPSILON 1.192092896e-07 // Smallest positive number, such that 1.0 + FLT_EPSILON != 1.0
  6. float3 PositivePow(float3 base, float3 power)
  7. {
  8. return pow(max(abs(base), float3(FLT_EPSILON, FLT_EPSILON, FLT_EPSILON)), power);
  9. }
  10. #if defined(UNITY_SINGLE_PASS_STEREO)
  11. float2 TransformStereoScreenSpaceTex(float2 uv, float w)
  12. {
  13. float4 scaleOffset = unity_StereoScaleOffset[unity_StereoEyeIndex];
  14. scaleOffset.xy *= _RenderViewportScaleFactor;
  15. return uv.xy * scaleOffset.xy + scaleOffset.zw * w;
  16. }
  17. #else
  18. float2 TransformStereoScreenSpaceTex(float2 uv, float w)
  19. {
  20. return uv * _RenderViewportScaleFactor;
  21. }
  22. #endif
  23. // Vertex manipulation
  24. float2 TransformTriangleVertexToUV(float2 vertex)
  25. {
  26. float2 uv = (vertex + 1.0) * 0.5;
  27. return uv;
  28. }
  29. struct AttributesDefault
  30. {
  31. float3 vertex : POSITION;
  32. };
  33. struct VaryingsDefault
  34. {
  35. float4 vertex : SV_POSITION;
  36. float2 texcoord : TEXCOORD0;
  37. float2 texcoordStereo : TEXCOORD1;
  38. };
  39. VaryingsDefault VertDefault(AttributesDefault v)
  40. {
  41. VaryingsDefault o;
  42. o.vertex = float4(v.vertex.xy, 0.0, 1.0);
  43. o.texcoord = TransformTriangleVertexToUV(v.vertex.xy);
  44. #if UNITY_UV_STARTS_AT_TOP
  45. o.texcoord = o.texcoord * float2(1.0, -1.0) + float2(0.0, 1.0);
  46. #endif
  47. o.texcoordStereo = TransformStereoScreenSpaceTex(o.texcoord, 1.0);
  48. return o;
  49. }
  50. #endif // UNITY_CMWAVEFORM_STDLIB