hlsl_merge.fx
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:2k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. sampler RAO1 : register(s0);
  2. sampler RAO2 : register(s1);
  3. float4 Params1 : register(c0);
  4. #define BGColor (Params1.rgb)
  5. #define ALP (Params1.a)
  6. float4 Params2 : register(c1);
  7. #define AMOD (Params2[0] >= 0)
  8. #define EN1 (Params2[1])
  9. #define EN2 (Params2[2])
  10. #define MMOD (Params2[3] >= 0)
  11. float4 Params3 : register(c2);
  12. #define AEM (Params3[0])
  13. #define TA0 (Params3[1])
  14. #define TA1 (Params3[2])
  15. #define SLBG (Params3[3] >= 0)
  16. float4 Merge(float4 Color1 : COLOR, float4 Color2 : COLOR) : COLOR
  17. {
  18. float a = EN1 * (MMOD ? ALP : Color1.a);
  19. float4 c = lerp(Color2, Color1, a);
  20. // c.a = AMOD ? Color2.a : Color1.a; // not used
  21. c.rgba = c.bgra;
  22. return c;
  23. }
  24. // 16
  25. float4 CorrectTexColor16(float4 TexColor : COLOR)
  26. {
  27. float A = AEM * !any(TexColor.rgb) * TA0;
  28. TexColor.a = (TexColor.a < 1.0) ? A : TA1; // < 0.5 ?
  29. return TexColor;
  30. }
  31. float4 Sample16RAO1(float2 Tex : TEXCOORD0) : COLOR
  32. {
  33. return EN1 * CorrectTexColor16(tex2D(RAO1, Tex));
  34. }
  35. float4 Sample16RAO2(float2 Tex : TEXCOORD0) : COLOR
  36. {
  37. return SLBG ? float4(BGColor, 0) : (EN2 * CorrectTexColor16(tex2D(RAO2, Tex)));
  38. }
  39. float4 main0(float2 Tex1 : TEXCOORD0, float2 Tex2 : TEXCOORD1) : COLOR
  40. {
  41. float4 Color1 = Sample16RAO1(Tex1);
  42. float4 Color2 = Sample16RAO2(Tex2);
  43. return Merge(Color1, Color2);
  44. }
  45. // 24
  46. float4 CorrectTexColor24(float4 TexColor : COLOR)
  47. {
  48. TexColor.a = AEM * !any(TexColor.rgb) * TA0;
  49. return TexColor;
  50. }
  51. float4 Sample24RAO1(float2 Tex : TEXCOORD0) : COLOR
  52. {
  53. return EN1 * CorrectTexColor24(tex2D(RAO1, Tex));
  54. }
  55. float4 Sample24RAO2(float2 Tex : TEXCOORD0) : COLOR
  56. {
  57. return SLBG ? float4(BGColor, 0) : (EN2 * CorrectTexColor24(tex2D(RAO2, Tex)));
  58. }
  59. float4 main1(float2 Tex1 : TEXCOORD0, float2 Tex2 : TEXCOORD1) : COLOR
  60. {
  61. float4 Color1 = Sample24RAO1(Tex1);
  62. float4 Color2 = Sample24RAO2(Tex2);
  63. return Merge(Color1, Color2);
  64. }
  65. // 32
  66. float4 SampleRAO1(float2 Tex : TEXCOORD0) : COLOR
  67. {
  68. return EN1 * tex2D(RAO1, Tex);
  69. }
  70. float4 SampleRAO2(float2 Tex : TEXCOORD0) : COLOR
  71. {
  72. return SLBG ? float4(BGColor, 0) : (EN2 * tex2D(RAO2, Tex));
  73. }
  74. float4 main2(float2 Tex1 : TEXCOORD0, float2 Tex2 : TEXCOORD1) : COLOR
  75. {
  76. float4 Color1 = SampleRAO1(Tex1);
  77. float4 Color2 = SampleRAO2(Tex2);
  78. return Merge(Color1, Color2);
  79. }