SwapChannelData.shader 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. Shader "Hidden/TriLib/SwapChannelData"
  2. {
  3. SubShader
  4. {
  5. // No culling or depth
  6. Cull Off ZWrite Off ZTest Always
  7. Pass
  8. {
  9. CGPROGRAM
  10. #pragma vertex vert
  11. #pragma fragment frag
  12. #include "UnityCG.cginc"
  13. struct appdata
  14. {
  15. float4 vertex : POSITION;
  16. float2 uv : TEXCOORD0;
  17. };
  18. struct v2f
  19. {
  20. float2 uv : TEXCOORD0;
  21. float4 vertex : SV_POSITION;
  22. };
  23. v2f vert (appdata v)
  24. {
  25. v2f o;
  26. o.vertex = UnityObjectToClipPos(v.vertex);
  27. o.uv = v.uv;
  28. return o;
  29. }
  30. sampler2D _MainTex;
  31. int _ChannelIndexA;
  32. int _ChannelIndexB;
  33. float4 frag (v2f i) : SV_Target
  34. {
  35. float4 col = tex2D(_MainTex, i.uv);
  36. float a = col[_ChannelIndexA];
  37. float b = col[_ChannelIndexB];
  38. switch (_ChannelIndexA) {
  39. case 0:
  40. col.x = b;
  41. break;
  42. case 1:
  43. col.y = b;
  44. break;
  45. case 2:
  46. col.z = b;
  47. break;
  48. case 3:
  49. col.w = b;
  50. break;
  51. }
  52. switch (_ChannelIndexB) {
  53. case 0:
  54. col.x = a;
  55. break;
  56. case 1:
  57. col.y = a;
  58. break;
  59. case 2:
  60. col.z = a;
  61. break;
  62. case 3:
  63. col.w = a;
  64. break;
  65. }
  66. return col;
  67. }
  68. ENDCG
  69. }
  70. }
  71. }