default.effect 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. #include "color.effect"
  2. uniform float4x4 ViewProj;
  3. uniform texture2d image;
  4. uniform float multiplier;
  5. sampler_state def_sampler {
  6. Filter = Linear;
  7. AddressU = Clamp;
  8. AddressV = Clamp;
  9. };
  10. struct VertInOut {
  11. float4 pos : POSITION;
  12. float2 uv : TEXCOORD0;
  13. };
  14. VertInOut VSDefault(VertInOut vert_in)
  15. {
  16. VertInOut vert_out;
  17. vert_out.pos = mul(float4(vert_in.pos.xyz, 1.0), ViewProj);
  18. vert_out.uv = vert_in.uv;
  19. return vert_out;
  20. }
  21. float4 PSDrawBare(VertInOut vert_in) : TARGET
  22. {
  23. return image.Sample(def_sampler, vert_in.uv);
  24. }
  25. float4 PSDrawAlphaDivide(VertInOut vert_in) : TARGET
  26. {
  27. float4 rgba = image.Sample(def_sampler, vert_in.uv);
  28. float alpha = rgba.a;
  29. float multiplier = (alpha > 0.0) ? (1.0 / alpha) : 0.0;
  30. return float4(rgba.rgb * multiplier, alpha);
  31. }
  32. float4 PSDrawNonlinearAlpha(VertInOut vert_in) : TARGET
  33. {
  34. float4 rgba = image.Sample(def_sampler, vert_in.uv);
  35. rgba.rgb = srgb_linear_to_nonlinear(rgba.rgb);
  36. rgba.rgb *= rgba.a;
  37. rgba.rgb = srgb_nonlinear_to_linear(rgba.rgb);
  38. return rgba;
  39. }
  40. float4 PSDrawNonlinearAlphaMultiply(VertInOut vert_in) : TARGET
  41. {
  42. float4 rgba = image.Sample(def_sampler, vert_in.uv);
  43. rgba.rgb = srgb_linear_to_nonlinear(rgba.rgb);
  44. rgba.rgb *= rgba.a;
  45. rgba.rgb = srgb_nonlinear_to_linear(rgba.rgb);
  46. rgba.rgb *= multiplier;
  47. return rgba;
  48. }
  49. float4 PSDrawSrgbDecompress(VertInOut vert_in) : TARGET
  50. {
  51. float4 rgba = image.Sample(def_sampler, vert_in.uv);
  52. rgba.rgb = srgb_nonlinear_to_linear(rgba.rgb);
  53. return rgba;
  54. }
  55. float4 PSDrawMultiply(VertInOut vert_in) : TARGET
  56. {
  57. float4 rgba = image.Sample(def_sampler, vert_in.uv);
  58. rgba.rgb *= multiplier;
  59. return rgba;
  60. }
  61. float4 PSDrawTonemap(VertInOut vert_in) : TARGET
  62. {
  63. float4 rgba = image.Sample(def_sampler, vert_in.uv);
  64. rgba.rgb = rec709_to_rec2020(rgba.rgb);
  65. rgba.rgb = reinhard(rgba.rgb);
  66. rgba.rgb = rec2020_to_rec709(rgba.rgb);
  67. return rgba;
  68. }
  69. float4 PSDrawMultiplyTonemap(VertInOut vert_in) : TARGET
  70. {
  71. float4 rgba = image.Sample(def_sampler, vert_in.uv);
  72. rgba.rgb *= multiplier;
  73. rgba.rgb = rec709_to_rec2020(rgba.rgb);
  74. rgba.rgb = reinhard(rgba.rgb);
  75. rgba.rgb = rec2020_to_rec709(rgba.rgb);
  76. return rgba;
  77. }
  78. technique Draw
  79. {
  80. pass
  81. {
  82. vertex_shader = VSDefault(vert_in);
  83. pixel_shader = PSDrawBare(vert_in);
  84. }
  85. }
  86. technique DrawAlphaDivide
  87. {
  88. pass
  89. {
  90. vertex_shader = VSDefault(vert_in);
  91. pixel_shader = PSDrawAlphaDivide(vert_in);
  92. }
  93. }
  94. technique DrawNonlinearAlpha
  95. {
  96. pass
  97. {
  98. vertex_shader = VSDefault(vert_in);
  99. pixel_shader = PSDrawNonlinearAlpha(vert_in);
  100. }
  101. }
  102. technique DrawNonlinearAlphaMultiply
  103. {
  104. pass
  105. {
  106. vertex_shader = VSDefault(vert_in);
  107. pixel_shader = PSDrawNonlinearAlphaMultiply(vert_in);
  108. }
  109. }
  110. technique DrawSrgbDecompress
  111. {
  112. pass
  113. {
  114. vertex_shader = VSDefault(vert_in);
  115. pixel_shader = PSDrawSrgbDecompress(vert_in);
  116. }
  117. }
  118. technique DrawMultiply
  119. {
  120. pass
  121. {
  122. vertex_shader = VSDefault(vert_in);
  123. pixel_shader = PSDrawMultiply(vert_in);
  124. }
  125. }
  126. technique DrawTonemap
  127. {
  128. pass
  129. {
  130. vertex_shader = VSDefault(vert_in);
  131. pixel_shader = PSDrawTonemap(vert_in);
  132. }
  133. }
  134. technique DrawMultiplyTonemap
  135. {
  136. pass
  137. {
  138. vertex_shader = VSDefault(vert_in);
  139. pixel_shader = PSDrawMultiplyTonemap(vert_in);
  140. }
  141. }