default.effect 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  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 PSDrawSrgbDecompressMultiply(VertInOut vert_in) : TARGET
  56. {
  57. float4 rgba = image.Sample(def_sampler, vert_in.uv);
  58. rgba.rgb = srgb_nonlinear_to_linear(rgba.rgb);
  59. rgba.rgb *= multiplier;
  60. return rgba;
  61. }
  62. float4 PSDrawMultiply(VertInOut vert_in) : TARGET
  63. {
  64. float4 rgba = image.Sample(def_sampler, vert_in.uv);
  65. rgba.rgb *= multiplier;
  66. return rgba;
  67. }
  68. float4 PSDrawTonemap(VertInOut vert_in) : TARGET
  69. {
  70. float4 rgba = image.Sample(def_sampler, vert_in.uv);
  71. rgba.rgb = rec709_to_rec2020(rgba.rgb);
  72. rgba.rgb = reinhard(rgba.rgb);
  73. rgba.rgb = rec2020_to_rec709(rgba.rgb);
  74. return rgba;
  75. }
  76. float4 PSDrawMultiplyTonemap(VertInOut vert_in) : TARGET
  77. {
  78. float4 rgba = image.Sample(def_sampler, vert_in.uv);
  79. rgba.rgb *= multiplier;
  80. rgba.rgb = rec709_to_rec2020(rgba.rgb);
  81. rgba.rgb = reinhard(rgba.rgb);
  82. rgba.rgb = rec2020_to_rec709(rgba.rgb);
  83. return rgba;
  84. }
  85. float4 PSDrawPQ(VertInOut vert_in) : TARGET
  86. {
  87. float4 rgba = image.Sample(def_sampler, vert_in.uv);
  88. rgba.rgb = st2084_to_linear(rgba.rgb) * multiplier;
  89. rgba.rgb = rec2020_to_rec709(rgba.rgb);
  90. return rgba;
  91. }
  92. float4 PSDrawTonemapPQ(VertInOut vert_in) : TARGET
  93. {
  94. float4 rgba = image.Sample(def_sampler, vert_in.uv);
  95. rgba.rgb = st2084_to_linear(rgba.rgb) * multiplier;
  96. rgba.rgb = reinhard(rgba.rgb);
  97. rgba.rgb = rec2020_to_rec709(rgba.rgb);
  98. return rgba;
  99. }
  100. technique Draw
  101. {
  102. pass
  103. {
  104. vertex_shader = VSDefault(vert_in);
  105. pixel_shader = PSDrawBare(vert_in);
  106. }
  107. }
  108. technique DrawAlphaDivide
  109. {
  110. pass
  111. {
  112. vertex_shader = VSDefault(vert_in);
  113. pixel_shader = PSDrawAlphaDivide(vert_in);
  114. }
  115. }
  116. technique DrawNonlinearAlpha
  117. {
  118. pass
  119. {
  120. vertex_shader = VSDefault(vert_in);
  121. pixel_shader = PSDrawNonlinearAlpha(vert_in);
  122. }
  123. }
  124. technique DrawNonlinearAlphaMultiply
  125. {
  126. pass
  127. {
  128. vertex_shader = VSDefault(vert_in);
  129. pixel_shader = PSDrawNonlinearAlphaMultiply(vert_in);
  130. }
  131. }
  132. technique DrawSrgbDecompress
  133. {
  134. pass
  135. {
  136. vertex_shader = VSDefault(vert_in);
  137. pixel_shader = PSDrawSrgbDecompress(vert_in);
  138. }
  139. }
  140. technique DrawSrgbDecompressMultiply
  141. {
  142. pass
  143. {
  144. vertex_shader = VSDefault(vert_in);
  145. pixel_shader = PSDrawSrgbDecompressMultiply(vert_in);
  146. }
  147. }
  148. technique DrawMultiply
  149. {
  150. pass
  151. {
  152. vertex_shader = VSDefault(vert_in);
  153. pixel_shader = PSDrawMultiply(vert_in);
  154. }
  155. }
  156. technique DrawTonemap
  157. {
  158. pass
  159. {
  160. vertex_shader = VSDefault(vert_in);
  161. pixel_shader = PSDrawTonemap(vert_in);
  162. }
  163. }
  164. technique DrawMultiplyTonemap
  165. {
  166. pass
  167. {
  168. vertex_shader = VSDefault(vert_in);
  169. pixel_shader = PSDrawMultiplyTonemap(vert_in);
  170. }
  171. }
  172. technique DrawPQ
  173. {
  174. pass
  175. {
  176. vertex_shader = VSDefault(vert_in);
  177. pixel_shader = PSDrawPQ(vert_in);
  178. }
  179. }
  180. technique DrawTonemapPQ
  181. {
  182. pass
  183. {
  184. vertex_shader = VSDefault(vert_in);
  185. pixel_shader = PSDrawTonemapPQ(vert_in);
  186. }
  187. }