fsr.effect 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. // Copyright (c) 2017-2020 Xiamen Yaji Software Co., Ltd.
  2. CCEffect %{
  3. techniques:
  4. - passes:
  5. - vert: vs
  6. frag: fs-easu
  7. pass: post-process
  8. rasterizerState:
  9. cullMode: none
  10. depthStencilState:
  11. depthTest: false
  12. depthWrite: false
  13. blendState:
  14. targets:
  15. - blend: true
  16. blendSrc: one
  17. blendDst: zero
  18. - vert: vs
  19. frag: fs-rcas
  20. pass: post-process
  21. rasterizerState:
  22. cullMode: none
  23. depthStencilState:
  24. depthTest: false
  25. depthWrite: false
  26. blendState:
  27. targets:
  28. - blend: true
  29. blendSrc: one
  30. blendDst: zero
  31. }%
  32. CCProgram vs %{
  33. #include <./chunks/vs>
  34. }%
  35. CCProgram ubo %{
  36. uniform PostUBO {
  37. vec4 fsrParams;
  38. vec4 texSize;
  39. };
  40. #pragma rate outputResultMap pass
  41. uniform sampler2D outputResultMap;
  42. }%
  43. CCProgram fs-easu %{
  44. precision highp float;
  45. #include <builtin/uniforms/cc-global>
  46. #include <legacy/output-standard>
  47. #include <unpack>
  48. #include <./chunks/fsr>
  49. in vec2 v_uv;
  50. #include <ubo>
  51. vec4 FsrRcasLoadF(vec2 p) {
  52. vec4 color = texture(outputResultMap, p/texSize.zw);
  53. // color = CCFragOutput(color);
  54. return color;
  55. }
  56. vec3 FsrEasuCF(vec2 p) {
  57. vec4 color = texture(outputResultMap, p);
  58. // color = CCFragOutput(color);
  59. return color.rgb;
  60. }
  61. layout(location = 0) out vec4 fragColor;
  62. void main () {
  63. vec3 c;
  64. vec4 con0, con1, con2, con3;
  65. // "rendersize" refers to size of source image before upscaling.
  66. vec2 rendersize = texSize.xy;
  67. FsrEasuCon(
  68. con0, con1, con2, con3,
  69. rendersize, rendersize, texSize.zw
  70. );
  71. FsrEasuF(c, gl_FragCoord.xy, con0, con1, con2, con3);
  72. float alpha = texture(outputResultMap, v_uv).a;
  73. fragColor = vec4(c.xyz, alpha);
  74. }
  75. }%
  76. CCProgram fs-rcas %{
  77. precision highp float;
  78. #include <builtin/uniforms/cc-global>
  79. #include <legacy/output-standard>
  80. #include <unpack>
  81. #include <./chunks/fsr>
  82. in vec2 v_uv;
  83. #include <ubo>
  84. vec4 FsrRcasLoadF(vec2 p) {
  85. vec4 color = texture(outputResultMap, p/texSize.zw);
  86. return color;
  87. }
  88. vec3 FsrEasuCF(vec2 p) {
  89. vec4 color = texture(outputResultMap, p);
  90. return color.rgb;
  91. }
  92. layout(location = 0) out vec4 fragColor;
  93. void main () {
  94. // Set up constants
  95. float con;
  96. FsrRcasCon(con, fsrParams.x);
  97. // Perform RCAS pass
  98. vec3 col = FsrRcasF(gl_FragCoord.xy, con);
  99. float alpha = texture(outputResultMap, v_uv).a;
  100. fragColor = vec4(col, alpha);
  101. }
  102. }%