default.effect 4.0 KB

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