Advertisement
Caiwan

ir03-main.cpp

Dec 15th, 2012
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 31.40 KB | None | 0 0
  1. //===============================================================================================================//
  2. /*
  3.  * Demo #3
  4.  * Chocolate Cake
  5.  * Indistrial Revlutioners / Experience 2012
  6.  * Caiwan
  7.  *
  8. */
  9. //===============================================================================================================//
  10.  
  11. #include <cmath>
  12. #include "engine/csncEngine.h"
  13.  
  14. using namespace NGcomp;
  15. using namespace NGcore;
  16. using namespace NGcommon;
  17.  
  18. //#define NO_MIPMAP_FBO
  19. //#define NO_SSAO
  20. //#define NO_HDR_POSTFX
  21.  
  22. // -----------------------------------------------------
  23. //#global - globalisan mindenre
  24. namespace {
  25.     clearColor *bgnd;
  26.     camera *cam0, *cam1, *cam2;
  27.  
  28.     light *light0;
  29. }
  30.  
  31. void play_callback(float time);
  32.  
  33. // -----------------------------------------------------
  34. //#HDR, #SSAO
  35. namespace {
  36.     drawShader *ssao_prefx, *ssao_postfx, *hdr_postfx;
  37.     FWrender::texture *ssao_rnm;
  38.  
  39.     //#global shaderek, postfx
  40.     FWrender::fbo *ssaoMap_map, *ssaoMap_map_hdr;
  41.     sprite *ssaoMap_sprite, *ssaoMap_sprite_hdr;
  42.  
  43. #define RNM_SIZE 16
  44. #define KERNEL_SIZE 32
  45.  
  46.     vec3float kernels[KERNEL_SIZE];
  47.     //sync
  48.     vtrack *blur_radius, *ssao_radius, *hdr_values;
  49. }
  50.  
  51. void HDR_SSAO_PostfxInit();
  52. void HDR_SSAO_PostfxSyncInit();
  53. void HDR_SSAO_PostfxDestruct();
  54.  
  55. // -----------------------------------------------------
  56. //#pottyok
  57. namespace{
  58.     FWmodel::particles *tentacles, *eleje_korok;
  59.     sprite **eleje_feliratok;
  60.  
  61.     model *eleje_felirat_3d;
  62.  
  63.     FWtexture::dynTexture *partice_tex[2]; //, *lsd_tex;
  64.  
  65.     drawShader *calc_particle, *post_particle;
  66.  
  67.     vtrack *elejeBind;
  68.  
  69.     vtrack *pBind;
  70.     vtrack *pFade;
  71.     vtrack *pEltol;
  72.  
  73.     sprite *particleMap_sprite;
  74. }
  75.  
  76. void particle_Init();
  77. void particle_SyncInit();
  78. void particle_Destruct();
  79.  
  80. int particle_isActive();
  81. void particle_SkyboxDraw();
  82. void particle_Draw();
  83.  
  84. int particle_eleje_isActive();
  85. void  particle_eleje_Draw();
  86.  
  87. // -----------------------------------------------------
  88. //#tunnel
  89. namespace{
  90.     tunnel *cso, *cso1, *cso2;
  91.     drawShader *pointlight, **tunnelShader;
  92.  
  93.     FWtexture::dynTexture *cso_particle_tex;
  94.  
  95. #define CSOBE_PARTICLE_DARAB 256
  96.  
  97.     static struct {
  98.         int index;
  99.         int id;
  100.         vec3float pont;
  101.         // ...
  102.     } csobe_particle_data[CSOBE_PARTICLE_DARAB];
  103.  
  104.     FWmodel::particles **csobe_particle;
  105. }
  106.  
  107. void tunnel_Init();
  108. void tunnel_SyncInit();
  109.  
  110. int tunnel_isActive();
  111. void tunnel_MeshDraw();
  112. void tunnel_FXDraw();
  113.  
  114. void tunnel_Destruct();
  115. // -----------------------------------------------------
  116. //#overlay
  117. namespace{
  118. }
  119. void overlay_Init();
  120. void overlay_SyncInit();
  121.  
  122. void overlay_Draw();
  123.  
  124. // -----------------------------------------------------
  125. //#greetings
  126.  
  127. namespace{
  128. #include "demo\greetings_Data.h"
  129.     model *greet_kocka;
  130.  
  131.     pointsprite **greetings_psprite;
  132.     NGcomp::vtrack *greetings_bind;
  133.  
  134.     drawShader *greet_shader;
  135.  
  136. #define KOCKAK_SZAMA 4096
  137. #define KOCKAK_HOSSZ 1000
  138.  
  139.     static struct{
  140.         vec3float pont;
  141.         vec3float tavolsag;
  142.         vec3float szog;
  143.         vec3float szin;
  144.         int sorszam;
  145.     } kockak_data [KOCKAK_SZAMA];
  146. }
  147.  
  148. void greetings_Init();
  149. void greetings_SyncInit();
  150. void greetings_Destruct();
  151.  
  152. int greetings_isActive();
  153. void greetings_Draw();
  154. void greetings_SpriteDraw();
  155.  
  156. namespace{
  157.     void _greetings(FWtexture::bitmap *b, void *params);
  158. }
  159. /*
  160.     ******************************************************************************************
  161. */
  162.  
  163. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  164. {
  165.     init();
  166.     loadPackage("pack.zip");
  167.  
  168.     /******************************************
  169.      * DEMO INIT
  170.     ******************************************/
  171.     // kamera
  172.     cam0 = new camera("cam0");
  173.     cam0->getP()->setPosMode(FWrender::CAMERA_POS_fix_center);
  174.     cam0->getP()->setCoordMode(FWrender::CAMERA_COORD_polar, FWrender::CAMERA_COORD_descartes);
  175.  
  176.     cam1 = new camera("cam1");
  177.     cam1->getP()->setPosMode(FWrender::CAMERA_POS_fix_center);
  178.     cam1->getP()->setCoordMode(FWrender::CAMERA_COORD_polar, FWrender::CAMERA_COORD_descartes);
  179.  
  180.     light0 = new light("light0");
  181.  
  182.     HDR_SSAO_PostfxInit();
  183.     tunnel_Init();
  184.     particle_Init();
  185.     greetings_Init();
  186.     overlay_Init();
  187.  
  188.     /******************************************/
  189.     setPlayer("GabrielDream_Rhythm.mp3", 128, 8);
  190.     fetchPrecalc();
  191.  
  192.     // todo: ezt megbaszni
  193.     /******************************************
  194.     * SETUP VALUE TRACKER
  195.     ******************************************/
  196.     cam0->exportCenter();
  197.     cam0->exportEye();
  198.     cam0->exportRotation();
  199.  
  200.     cam1->exportCenter();
  201.     cam1->exportEye();
  202.     cam1->exportRotation();
  203.  
  204.     NGcomp::exportClearColor();
  205.    
  206.     light0->exportPosition();
  207.     light0->getP()->setColors(.1,.1,.1, .5,.5,.5, 1.,1.,1.);
  208.  
  209.     HDR_SSAO_PostfxSyncInit();
  210.     tunnel_SyncInit();
  211.     particle_SyncInit();
  212.     greetings_SyncInit();
  213.     overlay_SyncInit();
  214.     /******************************************/
  215.     // mainloop + release
  216.     setPlayerCallback(play_callback);
  217.     play();
  218.  
  219.     HDR_SSAO_PostfxDestruct();
  220.     tunnel_Destruct();
  221.     particle_Destruct();
  222.     greetings_Destruct();
  223.  
  224.     release();
  225. }
  226.  
  227. /******************************************
  228. * DRAW
  229. ******************************************/
  230. namespace {
  231.     FWrender::camera *activeCam = NULL;
  232.     FWrender::light *activeLight = NULL;
  233. }
  234.  
  235. void play_callback(float time){
  236.     FWrender::setProjection();
  237.     FWrender::applyView();
  238.  
  239.     cam0->draw();   //activeCam = cam0->getP();
  240.     light0->draw(); activeLight = light0->getP();
  241.  
  242.     NGcommon::render_ClearColour();
  243. //HDR PosztFX
  244. #if 1
  245.     if (greetings_isActive()) // csak aktiv elemekre
  246.     {
  247.         float m[16],
  248.             blurRadiusV = 0.f,
  249.             ssaoRadiusV = 0.f,
  250.             ssaoRadiusF = 0.f,
  251.             ssaoRadiusB = 0.f;
  252.        
  253.         FWrender::mat_Get(FWrender::MM_PROJECTION, m);
  254.  
  255.         ssaoMap_map->bind();
  256.         NGcommon::render_ClearColour();
  257.  
  258.         // draw
  259.         {
  260.             ssao_prefx ->bind();
  261.             //tunnel_MeshDraw();
  262.             greetings_Draw();
  263.             ssao_prefx->unbind();
  264.         }
  265.         ssaoMap_map->unbind();
  266.  
  267.         // SSAO kiszamol
  268. #if 1
  269. #ifndef NO_SSAO
  270.         ssaoMap_map_hdr->bind();
  271.         NGcommon::render_ClearColour();
  272.         //ssao
  273.  
  274.         ssao_postfx->bind();
  275.         ssao_postfx->getShaderP()->set("normalTex", (int)1);
  276.         ssao_postfx->getShaderP()->set("depthTex",  (int)3);
  277.         ssao_postfx->getShaderP()->set("noiseTex",  (int)2);
  278.  
  279.         //const float ssao_radius = 3.f;
  280.         ssaoRadiusV = ssao_radius->getFV()[0] / 100.;
  281.         ssaoRadiusF = ssao_radius->getFV()[1] / 100. + 1.;
  282.         ssaoRadiusB = ssao_radius->getFV()[2] / 1024.;
  283.  
  284.         ssao_postfx->getShaderP()->set("radius",        ssaoRadiusV);
  285.         ssao_postfx->getShaderP()->set("radius2",       ssaoRadiusV / (800.f*ssaoRadiusF));
  286.         ssao_postfx->getShaderP()->setv("kernel",   3,  KERNEL_SIZE, (float*)kernels);
  287.         ssao_postfx->getShaderP()->set("noiseSize",     (float)RNM_SIZE);
  288.  
  289.         ssao_postfx->getShaderP()->set("near",          3.f);
  290.         ssao_postfx->getShaderP()->set("far",           800.f);
  291.         ssao_postfx->getShaderP()->set("fov",           (float)((60.f/180.f)*M_PI));
  292.         ssao_postfx->getShaderP()->set("aspectRatio",   16.f/9.f);
  293.  
  294.         ssao_postfx->getShaderP()->setm4x4("projectionMatrix", m);
  295.  
  296.         ssaoMap_sprite->draw();
  297.  
  298.         ssao_postfx->unbind();
  299.         ssaoMap_map_hdr->unbind();
  300. #endif /*NO_SSAO*/
  301. #endif
  302.         FWrender::switchBlend(true);
  303.         // blur + hdr correction
  304. #if 1
  305.         NGcommon::render_ClearColour();
  306.         hdr_postfx->bind();
  307.  
  308.         blurRadiusV = blur_radius->getF();
  309.         hdr_postfx->getShaderP()->set("blurRadius",     blurRadiusV/1024.f);
  310.  
  311.         hdr_postfx->getShaderP()->set("SSAORadius",     0.005f + ssaoRadiusB);
  312.         hdr_postfx->getShaderP()->set("illumMapPhong"(int)1);
  313.         hdr_postfx->getShaderP()->set("illumMapSSAO",   (int)2);
  314.  
  315.         vec3float hdrVal; hdr_values->getVec3Float(hdrVal);
  316.  
  317.         hdr_postfx->getShaderP()->set("bias",           1.f+hdrVal.x / 100.f);
  318.         hdr_postfx->getShaderP()->set("bloomLevel",     1.f+hdrVal.y / 100.f);
  319.         hdr_postfx->getShaderP()->set("exposure",       1.f+hdrVal.z / 100.f);
  320.  
  321.         ssaoMap_sprite_hdr->draw();
  322.         hdr_postfx->unbind();
  323. #else
  324.         ssaoMap_sprite_hdr->draw();
  325. #endif
  326.     greetings_SpriteDraw();
  327.     FWrender::switchBlend(false);
  328.     }
  329. #endif
  330.  
  331.     // feny ki
  332.     activeLight->unbind(false);
  333.  
  334. // tunnel
  335. #if 1
  336.     if (tunnel_isActive()){
  337.         tunnel_FXDraw();
  338.     } else
  339. #endif
  340.  
  341. #if 1
  342.     // tobbi
  343.     if (particle_isActive()){
  344.        
  345.         ssaoMap_map->bind();
  346.        
  347.         NGcommon::render_ClearColour();
  348.         {
  349.             particle_SkyboxDraw();
  350.             particle_Draw();
  351.         }
  352.        
  353.         ssaoMap_map->unbind();
  354.  
  355.         // postfx
  356.         post_particle->bind();
  357.  
  358.         post_particle->getShaderP()->set("skybox", (int)1);
  359.  
  360.         particleMap_sprite->draw();
  361.         post_particle->unbind();
  362.     } else
  363. #endif
  364.  
  365.         // Particlek
  366. #if 1
  367.     // legeleje
  368.     if (particle_eleje_isActive())
  369.     {
  370.         particle_eleje_Draw();
  371.     }
  372. #endif
  373.  
  374. // overlay
  375. #if 1
  376. #endif
  377.     overlay_Draw();
  378. }
  379.  
  380. //=========================================================================//
  381. // other callbacks
  382. // HDR+SSAO
  383. void HDR_SSAO_PostfxInit(){
  384.     // render buffers
  385. #ifndef NO_MIPMAP_FBO
  386.     ssaoMap_map     = new FWrender::fbo(4, 1, 0, true);
  387.     ssaoMap_map_hdr = new FWrender::fbo(2, 1, 0, true);
  388. #else
  389.     ssaoMap_map     = new FWrender::fbo(4, 1, 0, false);
  390.     ssaoMap_map_hdr = new FWrender::fbo(2, 1, 0, false);
  391. #endif
  392.     ssaoMap_sprite = new sprite("postfx");
  393.     ssaoMap_sprite->noBindExport();
  394.    
  395.     ssaoMap_sprite_hdr = new sprite("ssaoMap_mipmap");
  396.     ssaoMap_sprite_hdr->noBindExport();
  397.  
  398.     ssaoMap_sprite->setupFullscreenQuad(ssaoMap_map->getFBOTextureSize());
  399.     ssaoMap_sprite_hdr->setupFullscreenQuad(ssaoMap_map->getFBOTextureSize());
  400.  
  401.     ssaoMap_sprite->getP()->setTex(0, ssaoMap_map->getColorTexture(0));
  402.     ssaoMap_sprite->getP()->setTex(1, ssaoMap_map->getColorTexture(1));
  403.     ssaoMap_sprite->getP()->setTex(3, ssaoMap_map->getColorTexture(2));
  404.     //ssaoMap_sprite->getP()->setTex(3, ssaoMap_map->getDepthTexture());
  405.  
  406.     ssaoMap_sprite_hdr->getP()->setTex(0, ssaoMap_map    ->getColorTexture(0)); //color map
  407.     ssaoMap_sprite_hdr->getP()->setTex(1, ssaoMap_map    ->getColorTexture(3)); //illum map
  408.  
  409.     ssaoMap_sprite_hdr->getP()->setTex(2, ssaoMap_map_hdr->getColorTexture(0)); //ssao post-color
  410.  
  411.     // ssao map and kernel
  412.     ssao_rnm = new FWrender::texture();
  413.     FWtexture::bitmap *ssao_rnm_bmp = new FWtexture::bitmap(RNM_SIZE,RNM_SIZE,4);
  414.     unsigned char *bmp=ssao_rnm_bmp->getP();
  415.     for (int i=0; i<RNM_SIZE*RNM_SIZE*4; i++) bmp[i] = rand()%256;
  416.  
  417.     ssao_rnm->props.wrap.r = FWrender::TW_REPEAT;
  418.     ssao_rnm->props.wrap.s = FWrender::TW_REPEAT;
  419.     ssao_rnm->props.wrap.t = FWrender::TW_REPEAT;
  420.     ssao_rnm_bmp->genOGLTexture(ssao_rnm);
  421.  
  422.     delete ssao_rnm_bmp;
  423.  
  424.     ssaoMap_sprite->getP()->setTex(2, ssao_rnm);
  425.  
  426.     for(int i=0; i<KERNEL_SIZE; i++) {
  427.         kernels[i].x = 1. - (float)(rand()%10000)/5000.;
  428.         kernels[i].y = 1. - (float)(rand()%10000)/5000.;
  429.         kernels[i].z =      (float)(rand()%10000)/10000.;
  430.         //kernels[i].z = (float)(rand()%1000) / 1000.;
  431.         //kernels[i].z = 1.f;
  432.         kernels[i] /= kernels[i].vlen();
  433.     }
  434.  
  435.     // shader
  436.     ssao_prefx  = new drawShader("ssao_1",      "basic.vert.c",       "pointlight.frag.c");
  437.     ssao_postfx = new drawShader("ssao_2",      "passthrough.vert.c", "ssao.frag.c");
  438.  
  439. #ifndef NO_HDR_POSTFX
  440.     hdr_postfx  = new drawShader("hdr_process", "passthrough.vert.c",       "blur2.frag.c");
  441. #else
  442.     hdr_postfx  = new drawShader("hdr_process", "passthrough.vert.c",       "hdr_pass.frag.c");
  443. #endif
  444. }
  445. void HDR_SSAO_PostfxSyncInit(){
  446.     blur_radius = new vtrack("blur", "r", "",    NGcomp::VTT_scalar);
  447.     ssao_radius = new vtrack("ssao", "r", "123", NGcomp::VTT_vec3);
  448.     hdr_values  = new vtrack("hdr",  "v", "ble", NGcomp::VTT_vec3);
  449. }
  450. void HDR_SSAO_PostfxDestruct(){
  451.     if (ssaoMap_map) delete ssaoMap_map;
  452.     if (ssaoMap_map_hdr) delete ssaoMap_map_hdr;
  453.     if (ssao_rnm) delete ssao_rnm;
  454. }
  455.  
  456. //#tunnel
  457. namespace {
  458.     float tunnel_atmero[] = {25, 75, 100};
  459.  
  460. #define CSO_DARABOK (sizeof(tunnel_atmero)/sizeof(*tunnel_atmero))
  461. }
  462.  
  463. void tunnel_Init(){
  464.     FWmath::Spline* spline = NULL; //new FWmath::Spline(nodes, nodesT, sizeof(nodesT)/sizeof(*nodesT)); //nigger
  465.  
  466.     cso  = new tunnel("cso0", 50, 300, tunnel_atmero[0], 1., spline);
  467.     cso1 = new tunnel("cso1", 50, 300, tunnel_atmero[1], 8., spline);
  468.     cso2 = new tunnel("cso2", 50, 300, tunnel_atmero[2], 8., spline); // takarjon be folddel a siraso azt a jo buzi kurva anyadat te geci
  469.  
  470.     cso1->noBindExport();
  471.     cso2->noBindExport();
  472.  
  473.     cso->calculate();
  474.     cso1->calculate();
  475.     cso2->calculate();
  476.  
  477.     // particlek
  478.  
  479.     cso_particle_tex = new FWtexture::dynTexture();
  480.     cso_particle_tex->setName("particle3.jpg");
  481.     cso_particle_tex->requestTexture();
  482.  
  483.     csobe_particle = new FWmodel::particles* [CSO_DARABOK+1];
  484.     for (int i=0; i<CSO_DARABOK+1; ++i){
  485.         csobe_particle[i] = new FWmodel::particles();
  486.         csobe_particle[i]->setTex(cso_particle_tex);
  487.     }
  488.  
  489.     for(int i=0; i<CSOBE_PARTICLE_DARAB; ++i){
  490.         vec3float pont = FWmath::getRandomVector() * 100; //szelesseg
  491.         vec3float hely = pont; hely.x = 0.;
  492.  
  493.         pont.x = (-1 + ((float) i / CSOBE_PARTICLE_DARAB) * 2)*300; // hossz
  494.  
  495.         float tavolsag = hely.vlen();
  496.  
  497.         int level = 0;
  498.         if (tavolsag >= tunnel_atmero[CSO_DARABOK-1])
  499.             level = CSO_DARABOK;
  500.         else if (tavolsag >= tunnel_atmero[0]){
  501.             for(int j=0; j<CSO_DARABOK - 1; ++j){
  502.                 if (tavolsag < tunnel_atmero[j+1] && tavolsag >= tunnel_atmero[j]){
  503.                     level = j+1;
  504.                     break;
  505.                 }
  506.             }
  507.         }
  508.  
  509.         int n = csobe_particle[level]->push();
  510.         csobe_particle[level]->setPos(n, pont);
  511.  
  512.         csobe_particle[level]->setSize(n, 5);
  513.  
  514.         csobe_particle_data[i].index = level;
  515.         csobe_particle_data[i].id = n;
  516.         csobe_particle_data[i].pont = pont;
  517.     }
  518.  
  519.     if (spline) delete spline;
  520.  
  521.     tunnelShader = new drawShader* [4];
  522.  
  523.     pointlight      = new drawShader("pointlight",   "basic.vert.c",  "pointlight2.frag.c");
  524.     tunnelShader[0] = new drawShader("tunnelShader", "tunnel.vert.c", "tunnel1.frag.c");
  525.     tunnelShader[1] = new drawShader("tunnelShader", "tunnel.vert.c", "tunnel2.frag.c");
  526.     tunnelShader[2] = new drawShader("tunnelShader", "tunnel.vert.c", "tunnel3.frag.c");
  527.     tunnelShader[3] = new drawShader("tunnelShader", "basic.vert.c",  "particle2.frag.c");
  528. }
  529. void tunnel_SyncInit(){}
  530. int tunnel_isActive(){
  531.     if (cso->isActive())
  532.         return 1;
  533.     else
  534.         return 0;
  535. }
  536. void tunnel_MeshDraw(){
  537.     if (!tunnel_isActive()) return;
  538.     //NGcommon::render_ClearColour();
  539.     //tunnelShader->unbind();
  540.  
  541.     // nagy budos lofasz van itt kerem :C
  542. }
  543.  
  544. inline void tunnel_particle(int l){
  545.     tunnelShader[3]->bind();
  546.     csobe_particle[l]->draw();
  547.     tunnelShader[3]->unbind();
  548. }
  549.  
  550. void tunnel_FXDraw(){
  551.     // tunnel
  552.  
  553.     // 1. belso cso
  554.     FWrender::switchBlend(true);
  555.     FWrender::setBlend(FWrender::BC_SRC_ALPHA, FWrender::BC_ONE_MINUS_SRC_ALPHA);
  556.  
  557.     tunnel_particle(3);
  558.  
  559.     // 3. bgnd
  560.     tunnelShader[0]->bind();
  561.     cso2->bind();
  562.  
  563.     cso2->draw();
  564.     cso2->unbind();
  565.     tunnelShader[0]->unbind();
  566.  
  567.     tunnel_particle(2);
  568.  
  569.     FWrender::clearDepth(1000.);
  570.  
  571. #if 1
  572.     //FWrender::setDepthMask(false);
  573.     // 2. kulso cso
  574.     tunnelShader[2]->bind();
  575.  
  576.     cso1->bind();
  577.  
  578.     cso1->draw();
  579.     cso1->unbind();
  580.  
  581.     tunnelShader[2]->unbind();
  582.  
  583.     FWrender::clearDepth(1000.);
  584.    
  585.     tunnel_particle(1);
  586.  
  587.     // 1.
  588.     tunnelShader[1]->bind();
  589.     cso->bind();
  590.  
  591.     cso->draw();
  592.     cso->unbind();
  593.  
  594.     tunnelShader[1]->unbind();
  595.  
  596.     //FWrender::setDepthMask(false);
  597.     tunnel_particle(0);
  598. #endif
  599.     FWrender::switchBlend(false);
  600.     FWrender::clearDepth(1000.);
  601. }
  602.  
  603. void tunnel_Destruct(){}
  604.  
  605. //#pottyok
  606. namespace {
  607.     // eleje
  608.     const char *eleje_spriteok_neve[] = {
  609.         "cred0", "image_01.jpg", "image_01a.jpg",
  610.         "cred1", "image_02.jpg", "image_02a.jpg",
  611.         "cred2", "image_03.jpg", "image_03a.jpg",
  612.     };
  613.  
  614.     const unsigned char eleje_sprite_szinek_random[] = {
  615.         0x94, 0x72, 0x6B, 0xFF ,
  616.         0x41, 0x33, 0x30, 0xFF ,
  617.         0x12, 0x0F, 0x0E, 0xFF, //RGBA
  618.     };
  619.  
  620.     FWmodel::sprite *eleje_sprite_takaro;
  621.  
  622. #define SZINEK_SZAMA (sizeof(eleje_sprite_szinek_random) / sizeof(*eleje_sprite_szinek_random) / 4)
  623. #define ELEJE_SPRITEOK_DARAB (sizeof(eleje_spriteok_neve)/sizeof(*eleje_spriteok_neve)/3)
  624.  
  625.     FWtexture::dynTexture *eleje_spriteok_alhpa[ELEJE_SPRITEOK_DARAB];
  626.  
  627. #define ELEJE_KOROK_DARAB 64
  628.  
  629.     // vege
  630. #define POTTYOK_DARAB 256
  631. #define POTTYOK_HOSSZ 50
  632.  
  633. #define POTTYOK_RANDOM_ELTOL 20.
  634. #define POTTYOK_RANDOM_ELTOL_SAV (2. / POTTYOK_HOSSZ)
  635.  
  636.     struct {
  637.         vec3float irany, maszk;
  638.     } csapok_irany[] = {
  639.         vec3float( 1,  0,  0), vec3float(0, 1, 1),
  640.         vec3float(-1,  0,  0), vec3float(0, 1, 1),
  641.         vec3float( 0,  1,  0), vec3float(1, 0, 1),
  642.         vec3float( 0, -1,  0), vec3float(1, 0, 1),
  643.         vec3float( 0,  0,  1), vec3float(1, 1, 0),
  644.         vec3float( 0,  0, -1), vec3float(1, 1, 0),
  645.     };
  646.  
  647. #define CSAPOK_AGAK_DARAB (sizeof(csapok_irany) / sizeof(*csapok_irany))
  648. #define CSAPOK_OSSZES_POTYIKE_A_VILAGEGYETEMBEN  (CSAPOK_AGAK_DARAB * POTTYOK_DARAB)
  649.  
  650. #define CSAPOK_NODE_HOSSZ 16
  651. #define CSAPOK_NODE_SZORAS 11.5
  652.  
  653.     static struct {
  654.         vec3double *spline_coord;
  655.         double *spline_pos;
  656.         int length;
  657.         FWmath::Spline *spline;
  658.     } splineData [CSAPOK_AGAK_DARAB];
  659.  
  660.     static struct {
  661.         float ag_pozicio;
  662.         vec3float pozicio;
  663.         vec3float iranyvektor;
  664.         vec3float celpozicio;
  665.         vec3float szin;
  666.         int id;
  667.     } pottyok_data [CSAPOK_OSSZES_POTYIKE_A_VILAGEGYETEMBEN];
  668.  
  669.     vtrack *elejeScollEltol;
  670.  
  671.     skybox *csapok_skybox;
  672.     drawShader *csapok_skyboxShader;
  673. }
  674.  
  675. void particle_Init(){
  676.     partice_tex[0] = new FWtexture::dynTexture();
  677.     partice_tex[0] ->setName("PARTICLE0.JPG");
  678.     partice_tex[0] ->requestTexture();
  679.  
  680.     partice_tex[1] = new FWtexture::dynTexture();
  681.     partice_tex[1] ->setName("PARTICLE1.JPG");
  682.     partice_tex[1] ->requestTexture();
  683.  
  684. // elejere lofaszok
  685.     eleje_sprite_takaro = new FWmodel::sprite();
  686.     eleje_sprite_takaro->setSize(2, 2);
  687.     eleje_sprite_takaro->setAlignMode(ORIGN_ALIGN_CENTER_BIT | POS_ALIGN_CENTER_BIT);
  688.     eleje_sprite_takaro->setColor(0.847, 0.803, 0.796);
  689.  
  690.     eleje_feliratok = new sprite* [ELEJE_SPRITEOK_DARAB];
  691.     for (int i=0; i<ELEJE_SPRITEOK_DARAB; ++i){
  692.         eleje_feliratok[i] = new sprite(eleje_spriteok_neve[3*i+0], eleje_spriteok_neve[3*i+1]);
  693.         eleje_feliratok[i]->noBindExport();
  694.  
  695.         eleje_spriteok_alhpa[i] = new FWtexture::dynTexture();
  696.         eleje_spriteok_alhpa[i]->setName(eleje_spriteok_neve[3*i+2]);
  697.         eleje_spriteok_alhpa[i]->requestTexture();
  698.  
  699.         eleje_feliratok[i]->getP()->setTex(1, eleje_spriteok_alhpa[i]);
  700.         //eleje_feliratok[i]->setSize(fullscreen);
  701.         eleje_feliratok[i]->setSize(1);
  702.         eleje_feliratok[i]->setAlignMode(ORIGN_ALIGN_CENTER_BIT | POS_ALIGN_CENTER_BIT);
  703.     }
  704.  
  705.     // korok
  706.     eleje_korok = new FWmodel::particles();
  707.     eleje_korok->setTex(partice_tex[0]);
  708.     for (int i=0; i<ELEJE_KOROK_DARAB; i++){
  709.         vec3float rv = FWmath::getRandomNormalVector();
  710.         rv *= FWmath::getRandomNormalVector();
  711.         rv *= 50.f;
  712.  
  713.         vec3float v(rv.x, rv.y, 50 - 50*((float)i / ELEJE_KOROK_DARAB));
  714.        
  715.         int n= eleje_korok->push();
  716.         eleje_korok->setSize (n, 2);
  717.         eleje_korok->setPos  (n, v);
  718.  
  719.         int r = rand()%SZINEK_SZAMA;
  720.        
  721.         FWmath::rgbaCol color(
  722.             eleje_sprite_szinek_random[4*r + 0],
  723.             eleje_sprite_szinek_random[4*r + 1],
  724.             eleje_sprite_szinek_random[4*r + 2],
  725.             eleje_sprite_szinek_random[4*r + 3]
  726.         );
  727.         //FWmath::rgbaCol color(*(unsigned int*)&eleje_sprite_szinek_random[4*r + 0]);
  728.         eleje_korok->setColor(n, color);
  729.     }
  730.  
  731.     eleje_felirat_3d = new model3ds("title", "title.3ds");
  732.     eleje_felirat_3d->noBindExport();
  733.  
  734. // tentacles
  735.     tentacles = new FWmodel::particles();
  736.     tentacles->setTex(partice_tex[1]);
  737.  
  738.     vec3float color1(1., .8, 0.);
  739.     vec3float color2(0., .8, 1.);
  740.  
  741.     vec3float eltolMesszire, rnd;
  742.  
  743.     int i, j, k = 0, l, m, n = 0, hossz;
  744.     float u, t, node_pos, node_step = 1./(CSAPOK_NODE_HOSSZ-2);
  745.  
  746.     for (i=0; i<CSAPOK_AGAK_DARAB; ++i){
  747.         vec3float irany = csapok_irany[i].irany;
  748.         vec3float maszk = csapok_irany[i].maszk , p , pp;
  749.        
  750.         splineData[i].spline_coord = new vec3double[CSAPOK_NODE_HOSSZ+1];
  751.         splineData[i].spline_pos   = new double[CSAPOK_NODE_HOSSZ+1];
  752.         splineData[i].length = CSAPOK_NODE_HOSSZ+1;
  753.  
  754.         splineData[i].spline_coord[0].setZero();
  755.         splineData[i].spline_pos[0] = 0.;
  756.  
  757.         for (j=1; j<CSAPOK_NODE_HOSSZ+1; ++j){
  758.             rnd = FWmath::getRandomVector() * CSAPOK_NODE_SZORAS;
  759.  
  760.             node_pos = ((float) j * node_step) * POTTYOK_HOSSZ;
  761.  
  762.             splineData[i].spline_coord[j].x = (double)rnd.x;
  763.             splineData[i].spline_coord[j].y = (double)rnd.y;
  764.             splineData[i].spline_coord[j].z = (double)rnd.z;
  765.  
  766.             splineData[i].spline_pos[j] = (double)node_pos;
  767.         }
  768.  
  769.         splineData[i].spline = new FWmath::Spline(splineData[i].spline_coord, splineData[i].spline_pos, CSAPOK_NODE_HOSSZ);
  770.  
  771.         for (j = 0; j<POTTYOK_DARAB; ++j){
  772.             n = tentacles->push();
  773.  
  774.             t =  ((float)j / POTTYOK_DARAB);
  775.             u = POTTYOK_HOSSZ * t;
  776.  
  777.             pp = splineData[i].spline->getVec3Float(u);
  778.             //pp.setZero();
  779.             p = irany * u + pp * maszk;
  780.  
  781.             tentacles->setPos(n, p);
  782.  
  783.             pottyok_data[k].ag_pozicio = t;
  784.             pottyok_data[k].pozicio = p;
  785.             pottyok_data[k].id = n;
  786.  
  787.             eltolMesszire = pottyok_data[k].iranyvektor = FWmath::getRandomNormalVector() * POTTYOK_RANDOM_ELTOL;
  788.             eltolMesszire += p;
  789.  
  790.             hossz = eltolMesszire.vlen() + FWmath::getRandomNumber() * POTTYOK_RANDOM_ELTOL;
  791.             eltolMesszire /= eltolMesszire.vlen();
  792.  
  793.             pottyok_data[k].celpozicio = p + eltolMesszire * hossz;
  794.  
  795.             vec3float c = pottyok_data[k].szin = color2*t + color1*(1.-t);
  796.  
  797.             tentacles->setColor(n, c.x, c.y, c.z, 1.);
  798.  
  799.             k++;
  800.         }
  801.     }
  802.  
  803.     csapok_skybox = new skybox("tentacleSkybox_ejel12_45van", "starfield.jpg\0starfield.jpg\0starfield.jpg\0starfield.jpg\0starfield.jpg\0starfield.jpg\0");
  804.     csapok_skybox->noBindExport();
  805.  
  806.     // particle postfx
  807.     particleMap_sprite = new sprite("particle_postfx");
  808.     particleMap_sprite->noBindExport();
  809.     particleMap_sprite->setupFullscreenQuad(ssaoMap_map->getFBOTextureSize());
  810.  
  811.     particleMap_sprite->getP()->setTex(0, ssaoMap_map->getColorTexture(0));
  812.     particleMap_sprite->getP()->setTex(1, ssaoMap_map->getColorTexture(1));
  813.  
  814.     // shader
  815.     calc_particle = new drawShader("particle1",      "basic.vert.c",       "particle1.frag.c");
  816.     post_particle = new drawShader("particle1_post", "passthrough.vert.c", "particle1_post.frag.c");
  817.  
  818.     csapok_skyboxShader = new drawShader("particle1_post", "passthrough.vert.c", "skybox.frag.c");
  819. }
  820. void particle_SyncInit(){
  821.     //lsd_tex->requestTexture();
  822.  
  823.     pBind           = new vtrack("tent", "bind", NULL, VTT_switch);
  824.     pFade           = new vtrack("tent", "fade", NULL, VTT_scalar);
  825.     pEltol          = new vtrack("tent", "eltol", NULL, VTT_scalar);
  826. //  greetings_bind  = new vtrack("greet", "bind", NULL, NGcomp::VTT_bool_switch);
  827.  
  828.     elejeBind       = new vtrack("eleje", "bind",  NULL, VTT_switch);
  829.     elejeScollEltol = new vtrack("eleje", "eltol", NULL, VTT_scalar);
  830. }
  831.  
  832. // eleje
  833. int particle_eleje_isActive(){
  834.     if (elejeBind->getB())
  835.         return 1;
  836.     else
  837.         return 0;
  838. }
  839. void  particle_eleje_Draw(){
  840.     if (!particle_eleje_isActive()) return;
  841.  
  842.     FWrender::switchBlend(true);
  843.     FWrender::setBlend(FWrender::BC_DST_COLOR, FWrender::BC_ONE);
  844.     calc_particle->bind(); 
  845.  
  846.     calc_particle->getShaderP()->set("mode", (int)1);
  847.     calc_particle->getShaderP()->set("alphaMap", (int)1);
  848.  
  849.     eleje_korok->draw();
  850.  
  851.     cam1->draw();
  852.  
  853.     FWrender::setBlend(FWrender::BC_SRC_ALPHA, FWrender::BC_ONE_MINUS_SRC_ALPHA);
  854.     eleje_felirat_3d->draw(); // EZ SZAR
  855.  
  856.     calc_particle->getShaderP()->set("mode", (int)2);
  857.  
  858.     float eltol = elejeScollEltol->getF();
  859.  
  860.     for (int i=0; i<ELEJE_SPRITEOK_DARAB; ++i){
  861.         eleje_feliratok[i]->setPosition(0, eltol+(float)i);
  862.         eleje_feliratok[i]->draw();
  863.     }
  864.    
  865.     calc_particle->getShaderP()->set("mode", (int)1);
  866.     eleje_sprite_takaro->setPos(0, eltol+2.3164);
  867.     eleje_sprite_takaro->draw();
  868.  
  869.     calc_particle->unbind();
  870.     FWrender::setBlend(FWrender::BC_SRC_ALPHA, FWrender::BC_ONE_MINUS_SRC_ALPHA);
  871.     FWrender::switchBlend(false);
  872. }
  873. int particle_isActive(){
  874.     if (pBind->getB())
  875.         return 1;
  876.     else
  877.         return 0;
  878. }
  879.  
  880. float inline smooth(float t){
  881.     return t * t * (3 - 2 * t);
  882. }
  883.  
  884. // tobbi
  885.  
  886. void particle_SkyboxDraw(){
  887.     if (!particle_isActive()) return;
  888.     csapok_skyboxShader->bind();
  889.     csapok_skybox->draw();
  890.     csapok_skyboxShader->unbind();
  891. }
  892.  
  893. void particle_Draw(){
  894.     if (!particle_isActive()) return;
  895.  
  896.     FWrender::setBlend(FWrender::BC_DST_COLOR, FWrender::BC_ONE);
  897.     FWrender::switchBlend(true);
  898.  
  899.     calc_particle->bind(); 
  900.  
  901.     calc_particle->getShaderP()->set("mode", (int)3);
  902.  
  903.     float trans = pFade->getF();
  904.     float eltolas = pEltol->getF(), eltol_faktor = 0., eltol_hatar = 1.-eltolas, eltol_interpol = smooth(eltolas), t;
  905.    
  906.     vec3float sz;
  907.  
  908.     for (int i=0; i<CSAPOK_OSSZES_POTYIKE_A_VILAGEGYETEMBEN; i++){
  909.         int n = pottyok_data[i].id;
  910.         float pos = pottyok_data[i].ag_pozicio;
  911.         float alpha = trans - pos;
  912.         alpha = (alpha<0)? 0. : alpha;
  913.         alpha = (alpha>1)? 1. : alpha;
  914.        
  915.         sz = pottyok_data[i].szin;
  916.        
  917.         tentacles->setColor(n, sz.x,sz.y,sz.z, alpha);
  918.        
  919.         if ((eltolas>0) && (pos > eltol_hatar)){
  920.  
  921.                 eltol_faktor = eltolas - (1.-pos);
  922.  
  923.                 eltol_faktor = (eltol_faktor<0)? 0. : eltol_faktor;
  924.                 eltol_faktor = (eltol_faktor>1)? 1. : eltol_faktor;
  925.  
  926.                 t = (eltol_interpol * eltol_faktor) + (eltol_faktor * 1.-eltol_faktor);
  927.  
  928.                 vec3float ujlofasz = (pottyok_data[i].pozicio * 1.-t) + (pottyok_data[i].celpozicio * t);
  929.                 tentacles->setPos(n, ujlofasz);
  930.         } else {
  931.             tentacles->setPos(n, pottyok_data[i].pozicio);
  932.         }
  933.        
  934.     }
  935.     // csapok
  936.     tentacles->draw();
  937.  
  938.     calc_particle->unbind();
  939.  
  940.     FWrender::switchBlend(false);
  941.     FWrender::setBlend(FWrender::BC_SRC_ALPHA, FWrender::BC_ONE_MINUS_SRC_ALPHA);
  942. }
  943. void particle_Destruct(){
  944.  
  945. }
  946.  
  947. // #Greetings
  948. namespace{
  949. #define KOCKA_MERET 20
  950.     vtrack *griccFeliratBind;
  951.     vtrack *kockakFeny, *kockakMelyikVillog;
  952. }
  953.  
  954. void greetings_Init(){
  955.     greet_kocka = new model3ds("gricc", "cube10by10.3ds");
  956.  
  957.     for (int i=0; i<KOCKAK_SZAMA; ++i){
  958.         kockak_data[i].pont.z = 0;
  959.         kockak_data[i].pont.y = 0;
  960.         kockak_data[i].pont.x = ((float)i / KOCKAK_SZAMA) * KOCKAK_HOSSZ;
  961.  
  962.         vec3float random  = FWmath::getRandomVector() * KOCKA_MERET;
  963.         vec3float random2 = FWmath::getRandomVector() * 360;
  964.  
  965.         kockak_data[i].tavolsag = random;
  966.         kockak_data[i].szog     = random2;
  967.  
  968.         kockak_data[i].szin = FWmath::getRandomVector();
  969.  
  970.         kockak_data[i].szin.x = fabs(kockak_data[i].szin.x);
  971.         kockak_data[i].szin.y = fabs(kockak_data[i].szin.y);
  972.         kockak_data[i].szin.z = fabs(kockak_data[i].szin.z);
  973.  
  974.         float rnd = fabs(FWmath::getRandomNumber() * 20.);
  975.         int k = (int)rnd;
  976.         kockak_data[i].sorszam = k;
  977.     }
  978.  
  979.     // greet spriteok
  980.     greetings_psprite = new pointsprite* [GRICC_HOSSZ];
  981.    
  982.     for (int i=0; i<GRICC_HOSSZ; i++){
  983.         NGloader::textureLoader_pushProcTextureCallback(greetings[2*i], _greetings, greetings[2*i+1]);
  984.        
  985.         greetings_psprite[i] = new pointsprite(greetings[2*i], greetings[2*i]);
  986.         greetings_psprite[i]->noBindExport();
  987.  
  988.         greetings_psprite[i]->getP()->setTex(1, ssaoMap_map->getDepthTexture());
  989.  
  990.         vec3float rnd = FWmath::getRandomVector() * 30;
  991.  
  992.         float fade = (1. / (float)(GRICC_HOSSZ)) * (float)i; //#define-nel vigyazni kell a ()-re.
  993.         float anyad = fade * KOCKAK_HOSSZ;
  994.  
  995.         rnd.x += anyad;
  996.  
  997.         greetings_psprite[i]->getP()->setPos(rnd);
  998.         greetings_psprite[i]->getP()->setSize(25,25);
  999.     }
  1000.  
  1001.     greet_shader = new drawShader("greetUtolsoShaderBAZDMEG", "basic.vert.c", "particle3.frag.c");
  1002. }
  1003.  
  1004. void greetings_SyncInit(){
  1005.     greetings_bind     = new vtrack("griccTXT", "bind", NULL, NGcomp::VTT_bool_switch);
  1006.     kockakFeny         = new vtrack("kocka", "villog", NULL, NGcomp::VTT_velocity);
  1007.     kockakMelyikVillog = new vtrack("kocka", "sor", NULL, NGcomp::VTT_velocity);
  1008. }
  1009.  
  1010. void greetings_Destruct(){}
  1011.  
  1012. int greetings_isActive(){
  1013.     if (greet_kocka->isActive()) return 1; else return 0;
  1014. }
  1015.  
  1016. void greetings_Draw(){
  1017.     if (!greetings_isActive()) return;
  1018.     // ------------------------------
  1019.     // greet_kockak
  1020.  
  1021.     int rokagonba = kockakMelyikVillog->getI();
  1022.     float cicabogar = kockakFeny->getF();
  1023.  
  1024.     ssao_prefx->bind(); // ez nem plight, hanem ssao_shader
  1025.    
  1026.     for (int i=0; i<KOCKAK_SZAMA; i+=10){
  1027.         if (kockak_data[i].sorszam == rokagonba){
  1028.             vec3float a = kockak_data[i].szin;
  1029.             ssao_prefx->getShaderP()->set("joreggelt", (float)cicabogar);
  1030.             ssao_prefx->getShaderP()->set("color", a.x, a.y, a.z); 
  1031.         }else {
  1032.             ssao_prefx->getShaderP()->set("joreggelt", (float)0.);
  1033.         }
  1034.  
  1035.         greet_kocka->getGModelView()->identity();
  1036.        
  1037.         greet_kocka->getGModelView()->rotate(kockak_data[i].szog.x, 1,0,0);
  1038.         greet_kocka->getGModelView()->rotate(kockak_data[i].szog.y, 0,1,0);
  1039.         greet_kocka->getGModelView()->rotate(kockak_data[i].szog.z, 0,0,1);
  1040.        
  1041.         greet_kocka->getGModelView()->translate(kockak_data[i].pont);
  1042.         greet_kocka->getGModelView()->translate(kockak_data[i].tavolsag);
  1043.  
  1044.         greet_kocka->draw();
  1045.     }
  1046.     ssao_prefx->getShaderP()->set("joreggelt", (float)0.);
  1047.     ssao_prefx->unbind();
  1048. }
  1049.  
  1050. void greetings_SpriteDraw(){
  1051.     if (!greetings_isActive() || !greetings_bind->getB()) return;
  1052.     // ------------------------------
  1053.     greet_shader->bind();
  1054.  
  1055.     greet_shader->getShaderP()->set("zmap", (int)1);
  1056.     for (int i=0; i<GRICC_HOSSZ; i++)
  1057.         greetings_psprite[i]->draw();
  1058.  
  1059.     greet_shader->unbind();
  1060. }
  1061.  
  1062. //#overlay
  1063. namespace{
  1064.     FWmodel::sprite *feherSprite, *feketeSprite;
  1065.    
  1066.     FWtexture::dynTexture *kacsaAlpha, *exp12Alpha;
  1067.  
  1068.     sprite *kacsa, *exp12;
  1069.  
  1070.     vtrack *feherFade, *feketeFade;
  1071.     vtrack *kacsaFade;
  1072.  
  1073.     FWmodel::particles *vege_particle;
  1074.  
  1075. #define VEGE_KOROK_DARAB 128
  1076. }
  1077.  
  1078. void overlay_Init(){
  1079.     feherSprite = new FWmodel::sprite();
  1080.     feherSprite->setSize(2, 2);
  1081.  
  1082.     feketeSprite = new FWmodel::sprite();
  1083.     feketeSprite->setSize(2, 2);
  1084.     feketeSprite->setColor(0,0,0); // [s]PIROS!!! [/s] fekete.
  1085.  
  1086.     kacsa = new sprite("kacsa",  "duck2.png"),
  1087.     exp12 = new sprite("kacsa2", "exp12.png");
  1088.     exp12->noBindExport();
  1089.  
  1090.     kacsaAlpha = new FWtexture::dynTexture(), exp12Alpha = new FWtexture::dynTexture();
  1091.     kacsaAlpha->setName("duck2a.png");
  1092.     kacsaAlpha->requestTexture();
  1093.  
  1094.     kacsa->getP()->setTex(1, kacsaAlpha);
  1095.  
  1096.     exp12Alpha->setName("exp12a.png");
  1097.     exp12Alpha->requestTexture();
  1098.  
  1099.     exp12->getP()->setTex(1, exp12Alpha);
  1100.  
  1101.     kacsa->setAlignMode(POS_ALIGN_CENTER_BIT | ORIGN_ALIGN_CENTER_BIT);
  1102.     kacsa->setSize(1.15, 1.15);
  1103.     kacsa->setPosition(0, -0.3);
  1104.  
  1105.     exp12->setAlignMode(POS_ALIGN_CENTER_BIT | ORIGN_ALIGN_CENTER_BIT | POS_ALIGN_BOTTOM_BIT | ORIGN_ALIGN_BOTTOM_BIT);
  1106.     exp12->setSize(.75, .75);
  1107.  
  1108.     vege_particle = new FWmodel::particles();
  1109.  
  1110.         // korok
  1111.     vege_particle = new FWmodel::particles();
  1112.     vege_particle->setTex(partice_tex[0]);
  1113.     for (int i=0; i<VEGE_KOROK_DARAB; i++){
  1114.         vec3float rv = FWmath::getRandomNormalVector();
  1115.         rv *= FWmath::getRandomNormalVector();
  1116.         rv *= 50.f;
  1117.  
  1118.         vec3float v(100 - 200*((float)i / VEGE_KOROK_DARAB), rv.y, rv.z);
  1119.        
  1120.         int n= vege_particle->push();
  1121.         vege_particle->setSize (n, 2);
  1122.         vege_particle->setPos  (n, v);
  1123.         vege_particle->setColor(n, 0,0,0,.2);
  1124.     }
  1125.  
  1126. }
  1127.  
  1128. void overlay_SyncInit(){
  1129.     feherFade = new vtrack("feher",  "fade", "", VTT_velocity);
  1130.     feketeFade= new vtrack("fekete", "fade", "", VTT_velocity);
  1131.  
  1132.     kacsaFade = new vtrack("kacsa", "fade", "", VTT_velocity);
  1133. }
  1134.  
  1135. void overlay_Draw(){
  1136.     FWrender::switchBlend(true);
  1137.     FWrender::setBlend(FWrender::BC_SRC_ALPHA, FWrender::BC_ONE_MINUS_SRC_ALPHA);
  1138.  
  1139.     if (kacsa->isActive()){
  1140.         calc_particle->bind();
  1141.  
  1142.         calc_particle->getShaderP()->set("mode", (int)1);
  1143.         vege_particle->draw();
  1144.  
  1145.         calc_particle->getShaderP()->set("mode", (int)4);
  1146.         calc_particle->getShaderP()->set("alphaMap", (int)1);
  1147.        
  1148.         float fade = kacsaFade->getF();
  1149.         calc_particle->getShaderP()->set("csoda", fade);
  1150.  
  1151.         kacsa->draw();
  1152.         exp12->draw();
  1153.  
  1154.         calc_particle->unbind();
  1155.     }
  1156.  
  1157.     float feher_fade = feherFade->getF();
  1158.     if (feher_fade>0.){
  1159.         feherSprite->setAlpha(feher_fade);
  1160.         feherSprite->draw();
  1161.     }
  1162.  
  1163.     float fekete_fade = feketeFade->getF();
  1164.     if (fekete_fade>0.){
  1165.         feketeSprite->setAlpha(fekete_fade);
  1166.         feketeSprite->draw();
  1167.     }
  1168.  
  1169.     FWrender::switchBlend(false);
  1170. }
  1171.  
  1172. // --------------------------------------------------------------------------------
  1173. ////// callbacks  /////
  1174. namespace {
  1175.     void _greetings(FWtexture::bitmap *b, void *params){
  1176.         b->resizeForced(512, 512, 4);
  1177.         //b->resizeForced(1024, 1024, 4); // too much?
  1178.  
  1179.         FWtexture::gen_text test;
  1180.         test.text = (const char*)(params);
  1181.         test.size = 24;
  1182.  
  1183.         test.font = FWtexture::FONT_Times_New_Roman;
  1184.    
  1185.         test.generate(b);
  1186.     }
  1187. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement