Effects 2D.cpp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. /******************************************************************************/
  2. #include "stdafx.h"
  3. namespace EE{
  4. /******************************************************************************/
  5. ColorMatrix& ColorMatrix::setRGB () {x.set(1, 0, 0); y.set(0, 1, 0); z.set(0, 0, 1); pos.zero(); return T;}
  6. ColorMatrix& ColorMatrix::setRBG () {x.set(1, 0, 0); y.set(0, 0, 1); z.set(0, 1, 0); pos.zero(); return T;}
  7. ColorMatrix& ColorMatrix::setGRB () {x.set(0, 1, 0); y.set(1, 0, 0); z.set(0, 0, 1); pos.zero(); return T;}
  8. ColorMatrix& ColorMatrix::setGBR () {x.set(0, 1, 0); y.set(0, 0, 1); z.set(1, 0, 0); pos.zero(); return T;}
  9. ColorMatrix& ColorMatrix::setBRG () {x.set(0, 0, 1); y.set(1, 0, 0); z.set(0, 1, 0); pos.zero(); return T;}
  10. ColorMatrix& ColorMatrix::setBGR () {x.set(0, 0, 1); y.set(0, 1, 0); z.set(1, 0, 0); pos.zero(); return T;}
  11. ColorMatrix& ColorMatrix::setMono()
  12. {
  13. Flt f=1.0f/3;
  14. x=f;
  15. y=f;
  16. z=f;
  17. pos.zero();
  18. return T;
  19. }
  20. ColorMatrix& ColorMatrix::setHue(Flt h)
  21. {
  22. h=3*Frac(h);
  23. Flt a=2-Sat(h)-Sat(3-h),
  24. b=1-Sat(Abs(h-1)),
  25. c=1-Sat(Abs(h-2));
  26. x.set(a, b, c);
  27. y.set(c, a, b);
  28. z.set(b, c, a);
  29. pos.zero();
  30. return T;
  31. }
  32. void ColorMatrix::draw(Flt alpha)
  33. {
  34. if(alpha>0)
  35. if(C ImageRTPtr &back=Renderer.getBackBuffer())
  36. {
  37. SPSet("ColTransMatrix", T);
  38. Sh.h_Step->set(alpha);
  39. if(!Sh.h_ColTrans)Sh.h_ColTrans=Sh.get("ColTrans"); Sh.h_ColTrans->draw(*back);
  40. }
  41. }
  42. void ColorTransHB(Flt hue, Flt brightness, Flt alpha)
  43. {
  44. if(alpha>0)
  45. if(C ImageRTPtr &back=Renderer.getBackBuffer())
  46. {
  47. SPSet("ColTransMatrix", ColorMatrix().setHue(hue));
  48. SPSet("ColTransHsb" , Vec(0, 0, brightness));
  49. Sh.h_Step->set(alpha);
  50. if(!Sh.h_ColTransHB)Sh.h_ColTransHB=Sh.get("ColTransHB"); Sh.h_ColTransHB->draw(*back);
  51. }
  52. }
  53. void ColorTransHSB(Flt hue, Flt saturation, Flt brightness, Flt alpha)
  54. {
  55. if(alpha>0)
  56. if(C ImageRTPtr &back=Renderer.getBackBuffer())
  57. {
  58. SPSet("ColTransHsb", Vec(hue, saturation, brightness));
  59. Sh.h_Step->set(alpha);
  60. if(!Sh.h_ColTransHSB)Sh.h_ColTransHSB=Sh.get("ColTransHSB"); Sh.h_ColTransHSB->draw(*back);
  61. }
  62. }
  63. /******************************************************************************/
  64. void DisplayDraw::fxBegin()
  65. {
  66. if(!Renderer._back )Renderer._back .get (ImageRTDesc(Renderer._gui->w(), Renderer._gui->h(), IMAGERT_RGBA)); // Alpha is used for transparency
  67. if(!Renderer._back_ds)Renderer._back_ds.getDS(Renderer._back->w(), Renderer._back->h(), Renderer._back->samples());
  68. Renderer._cur_main =Renderer._back .rc();
  69. Renderer._cur_main_ds=Renderer._back_ds.rc();
  70. Renderer.set(Renderer._cur_main, Renderer._cur_main_ds, false);
  71. }
  72. ImageRTPtr DisplayDraw::fxEnd()
  73. {
  74. ImageRTPtr cur; Swap(cur, Renderer._back); Renderer._back_ds.clear();
  75. Renderer._cur_main =Renderer._gui .rc();
  76. Renderer._cur_main_ds=Renderer._gui_ds.rc();
  77. Renderer.set(Renderer._cur_main, Renderer._cur_main_ds, true);
  78. return cur;
  79. }
  80. /******************************************************************************/
  81. RippleFx& RippleFx::reset()
  82. {
  83. xx=60;
  84. xy=40;
  85. yx=60;
  86. yy=35;
  87. step =Time.appTime();
  88. power =0.005f;
  89. alpha_scale=0;
  90. alpha_add =1;
  91. center=0.5f;
  92. return T;
  93. }
  94. void RippleFx::draw(C Image &image, C Rect &rect)
  95. {
  96. if(!Sh.h_Ripple)
  97. {
  98. Sh.h_Ripple =Sh.get("Ripple");
  99. Sh.h_RippleParams=GetShaderParam("Rppl");
  100. }
  101. Sh.h_RippleParams->set(T);
  102. VI.shader(Sh.h_Ripple); image.draw(rect);
  103. }
  104. /******************************************************************************/
  105. TitlesFx& TitlesFx::reset()
  106. {
  107. step =Time.appTime()*2;
  108. center=0.5f;
  109. range =0.4f;
  110. smooth=0.1f;
  111. swirl =0.015f;
  112. return T;
  113. }
  114. void TitlesFx::draw(C Image &image)
  115. {
  116. SPSet("Ttls", T);
  117. if(!Sh.h_Titles)Sh.h_Titles=Sh.get("Titles"); Sh.h_Titles->draw(image);
  118. }
  119. /******************************************************************************/
  120. void FadeFx(C Image &image, Flt time, Image *fade_modifier)
  121. {
  122. Sh.h_ImageCol[1]->set(fade_modifier); MaterialClear();
  123. Sh.h_Step ->set(time );
  124. if(!Sh.h_Fade)Sh.h_Fade=Sh.get("Fade"); Sh.h_Fade->draw(image);
  125. }
  126. /******************************************************************************/
  127. void WaveFx(Flt time, Flt scale)
  128. {
  129. if(scale>0 && scale<1)
  130. if(C ImageRTPtr &back=Renderer.getBackBuffer())
  131. {
  132. Matrix m;
  133. m.setPos(Vec2(-0.5f)).scale(Vec(Cos(time), Sin(time), 0), scale)
  134. .move (Vec2( 0.5f));
  135. Sh.h_Color[0]->set(Vec(m.x.x, m.x.y, m.pos.x));
  136. Sh.h_Color[1]->set(Vec(m.y.x, m.y.y, m.pos.y));
  137. ALPHA_MODE alpha=D.alpha(ALPHA_NONE); // disable alpha blending
  138. if(!Sh.h_Wave)Sh.h_Wave=Sh.get("Wave"); Sh.h_Wave->draw(*back);
  139. D.alpha(alpha);
  140. }
  141. }
  142. /******************************************************************************/
  143. void RadialBlurFx(Flt scale, Flt alpha, C Vec2 &center)
  144. {
  145. if(scale>0 && alpha>0)
  146. if(C ImageRTPtr &back=Renderer.getBackBuffer())
  147. {
  148. Sh.h_Color[0]->set(Vec4(D.screenToUV(center), 1+Abs(scale), alpha));
  149. if(!Sh.h_RadialBlur)Sh.h_RadialBlur=Sh.get("RadialBlur"); Sh.h_RadialBlur->draw(*back);
  150. }
  151. }
  152. /******************************************************************************/
  153. }
  154. /******************************************************************************/